根据先声明者优先的原则,如果HelloFriend在MakeFriend的pom.xml中dependency先配置,MakeFriend就依赖HelloFriend的log4j ;
3.maven的生命周期
maven的生命周期定义了各个构建环节执行的顺序;
有了这个清单maven就可以自动化执行构建命令了;
maven有三个独立的生命周期:
clean lifecycle ->进行构建之前的一些清理工作;
default lifecycle ->构建的核心部分;编译、测试、打包、安装、部署等;
site lifecycle ->生成项目报告、站点、发布站点;
三个周期之间是相互独立的;
例如 :mvn clean 仅能用来清理;mvn site 用来生成站点;也可以 mvn clean install site 同时运行三套生命周期;
每套生命周期都由一组阶段组成;
平时输入命令时总对应于一个特定的阶段;
例如:mvn clean 对应clean周期里的clean阶段;clean周期里还有其它阶段;
1)clean周期
clean周期包含三个阶段:
①pre-clean 执行一些需要在clean之前完成的工作
②clean 移除所有上一次构建生成的文件
③post-clean 执行一些需要在clean之后立刻完成的工作
2)site 周期
①pre-site 执行一些需要在生成站点文档之前完成的工作
②site 生成项目的站点文档
③post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
④site-deploy 将生成的站点文档部署到特定的服务器上
这里经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点,这可是Maven相当强大的功能,Manager比较喜欢,文档及统计数据自动 生成,很好看。
3)default周期
Default生命周期是Maven生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。这里,只解释一些比较重要和常用的阶段:
validate
generate-sources
process-sources
generate-resources
process-resources 复制并处理资源文件,至目标目录,准备打包。
compile 编译项目的源代码。
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources 复制并处理资源文件,至目标测试目录。
test-compile 编译测试源代码。
process-test-classes
test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
prepare-package
package 接受编译好的代码,打包成可发布的格式,如JAR。
pre-integration-test
integration-test
post-integration-test
verify
install将包安装至本地仓库,以让其它项目依赖。
deploy将最终的包复制到远程的仓库,以让其它开发人员与项目共享或部署到服务器上运行。
4)生命周期与自动化构建
运行任何一个阶段时,它前面的所有阶段都会被执行;
例如:mvn package打包命名,不仅会打包,还会执行前面的 编译mvn compile、测试mvn test等;
这也是maven能自动执行构建过程的原因;
maven的插件机制是完全依赖maven的生命周期的;
4.插件和目标
maven 的核心仅定义了抽象的生命周期,具体任务都是插件完成的;
每个插件都能实现多个功能,每个功能就是一个插件目标;
maven的生命周期与插件目标相互绑定,以完成某个具体的构建任务;
例如:compile 是插件 maven-compiler-plugin 的一个目标;
test-compile 也是插件 maven-compiler-plugin 的一个目标;
pre-clean 是插件 maven-clean-plugin的一个目标;
eclipse中的maven插件:
eclipse中一般集成了maven插件;windows|preferences|maven 可找到maven设置;
其中重要的配置有:installtions和user settings
选 installtions 可设置maven 的位置;
user settings 指定 conf/settings.xml的位置,进而通过配置来获取本地仓库位置;
5.继承
因为依赖的传递规则中,只有compile范围的依赖可以传递;
有时候为了统一管理版本,其它范围的依赖也需要统一;比如junit经常是test范围;
这是可以利用继承机制;
例如:将junit依赖统一提取到父工程;在子工程中声明junit依赖时不指定版本,以父工程为主;
①创建Parent工程,打包方式为pom
②收集所有非compile范围的依赖信息,使用dependencyManagement标签统一管理
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
③在各个子工程中引用父工程
<parent>
<groupId>com.atguigu.maven</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 以当前文件为基准查找父工程中pom.xml文件的相对路径 -->
<relativePath>../Parent/pom.xml</relativePath>
</parent>
④删除子工程中的重复信息
groupId
artifactid
⑤在子工程中找到被父工程管理的依赖信息,删除版本号部分
⑥在父工程中统一修改已管理的依赖信息的版本号,看是否能够控制所有子工程
6.聚合
配置继承后,要先安装父工程;否则子工程就没法安装;
如果要将父工程和其所有的子工程一起安装;可以利用聚合;
聚合的作用是一起安装;
配置:在总的聚合工程中加入如下信息
例如:Hello、HelloFriend、MakeFriends都是Parent的子模块;
可在 Parent工程的pom.xml中添加聚合配置;
<modules>
<module>../Hello</module>
<module>../HelloFriend</module>
<module>../MakeFriends</module>
</modules>
输入:mvn install 安装Parent时,其子工程也会一起安装;
注意:聚合和继承没有必然的联系;
7.自动化部署(不常用)
8.网址
- (转)Maven学习总结(四)——Maven核心概念
孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(四)——Maven核心概念 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Mav ...
- Maven(三)理解Maven核心概念
转载自: http://www.cnblogs.com/holbrook/archive/2012/12/24/2830519.html 本文以类图的方式,介绍maven核心的12个概念以及相互之间的 ...
- (一)Maven 基本概念——根目录、项目创建、坐标
1. MavenProjectRoot(项目根目录) |----src | |----main | | |----java ——存放项目的.java文件 ...
- Maven学习总结(4)——Maven核心概念
Maven学习总结(四)--Maven核心概念 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识 ...
- Maven(一)Maven 的概念和安装
Maven 的概念和安装 Maven 是什么 首先 Maven 肯定是一个造福人类的好东西,它可以省去我们构建项目中引入 jar 包时的麻烦,还有利于项目的模块化开发等等等好处.在如今项目中大体都是使 ...
- Maven 基本概念——根目录、项目创建、坐标
1. MavenProjectRoot(项目根目录) |----src | |----main | | |----java ——存放项目的.java文件 ...
- Maven基本概念——根目录、项目创建、坐标
转载来自:https://www.cnblogs.com/zjfjava/p/6817793.html 尊重原创! (一)Maven 基本概念——根目录.项目创建.坐标 1. MavenProj ...
- maven的概念-01
1.maven 简介 maven是Apach软件基金会维护的一款自动化构建工具: 作用是服务于java平台的项目构建和依赖管理: 2.关于项目构建 1)java代码 Java是一门编译型语言,.j ...
- Maven基本概念和操作
最近在学Java,找来一个开源项目练手,它是用 Spring Boot 搭建的框架,于是去学 Spring Boot,然而 Spring Boot 需要有 Spring 框架和 Maven 的使用经验 ...
随机推荐
- PDO原生分页
** PDO分页** 1.PDO连接数据库 $dbh=new PDO('mysql:host=127.0.0.1;dbname=03a','root','root');//使用pdo 2.接收页码 $ ...
- stalstack
Saltstack 是干什么的 saltstack 是一个开源异构平台基础设置管理工具 Saltstack 能干什么 如果是一个管理成千上百服务器的管理员,你会遇到场景 需要在每台服务器上面部署age ...
- T100——上传图片
例子可参考aooi100,上传集团logo的程序 ON ACTION btn_updatelogo #選取上傳檔案,GDC專用 LET gs_upload = NULL CALL cl_client_ ...
- C# HttpWebRequest请求远程地址获取返回消息
HttpWebRequest请求远程地址获取返回消息 /// <summary> /// 请求远程Api获取响应返回字符串 /// </summary> /// <par ...
- ZROI Day1 比赛解题报告
ZROI Day1 比赛解题报告 版权原因不提供题面相关信息 序 前天晚上搞得比较晚,然后早上做题很没状态,刚看到T1发现没什么思路就有点慌,赶紧看了看T2,T3, 发现T3暴力很好打,T2想了一想可 ...
- php-fpm三种运行模式
php-fpm配置 配置文件:php-fpm.conf 开启慢日志功能的: slowlog = /usr/local/var/log/php-fpm.log.slowrequest_slowlog_t ...
- Express bodyParser中间件使用方式
bodyParser中间件用来解析http请求体,是express默认使用的中间件之一. 1.这个模块提供以下解析器 (1) JSON body parser (2) Raw body parser ...
- window, linux, mac 比较文件和文件夹的区别
windows 端 winmerge beyondcompare Mac 和 linux 端 Meld kdiff3 diff command 更多可参考:https://alternativeto ...
- 08-【jsp重点】
jsp的四个作用域和9个内置对象 jsp内置对象[重点]:pageContext.request.session.application.response.out.page.exception.con ...
- deep_learning_MNIST数据集
Code_link:https://pan.baidu.com/s/1dshQt57196fhh67F8nqWow 本文是为既没有机器学习基础也没了解过TensorFlow的码农.序媛们准备的.如果已 ...