根据先声明者优先的原则,如果HelloFriend在MakeFriend的pom.xml中dependency先配置,MakeFriend就依赖HelloFriend的log4j ;
.png)
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 的位置;
.png)
user settings 指定 conf/settings.xml的位置,进而通过配置来获取本地仓库位置;
.png)
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 的使用经验 ...
随机推荐
- Dijkstra(模板)
#define IOS ios_base::sync_with_stdio(0); cin.tie(0); #include <cstdio>//sprintf islower isupp ...
- 深入15个HTML元素方法,你见过吗?
虽然现代化的 web 开发更多地依赖各种 MVC 框架,但开发者仍需要熟练掌握 HTML 与 DOM 方面的基础知识.不过,即使是有着多年经验的前端开发者,也会遇到一些不明所以的情况.本文首先将为初学 ...
- Mysql-Sqlalchemy-ORM-多外键关联
创建表结构:orm_many_fk.py from sqlalchemy import Integer, ForeignKey, String, Column,create_engine from s ...
- Springboot导出Excel并下载
引入相关依赖 <!--数据导出excel--> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> & ...
- js排列组合
/* 全排列主要用到的是递归和数组的插入 arr: 需要排列的数组 第一步:从里面取一个,创建一个新的数组,形式为二维,例如arr = [1,2,3]; 取出3(没有特殊要求,随便取一个),放入 te ...
- Codeforces 1237F. Balanced Domino Placements
传送门 很妙的题 首先先考虑一个简化的问题,现在有一行格子让你填 你要么填一格 要么填两格 有的格子不让你填 问你填了 $a$ 个一格和填了 $b$ 个两格有多少种方案 那么显然先只考虑放两格的方案, ...
- MySQL存储引擎InnoDB大量数据下的问题
MySQL如果只有MyISAM一个引擎的话,那你们黑真的也有道理,但问题是InnoDB现在已经是MySQL默认的引擎,而且这个引擎综合能力很强,能用好这个引擎其实就已经能解决大多数需要数据库的业务逻辑 ...
- c# winfrom 界面设计
1.在用DotnetBar的RibbonControl时,界面最大化时,会把电脑桌面的任务栏遮盖住: 解决办法:在load事件中写入: , Screen.PrimaryScreen.WorkingAr ...
- # 风险定性(Qualitative)分析
1. 从一个给教师打分的设计表说起 我们参加一个培训课程,一般在培训结束之后,培训机构一般都会分发一份培训师培训效果反馈表,用于评价其讲师的培训能力的强弱. 如果是一家没有什么经验的培训机构设计的反馈 ...
- fork 代码进阶
fork进阶知识 先看一份代码: [cpp] view plain copy /* * fork_test.c * version 2 * Created on: 2010-5-29 * ...