clean清理项目
- pre-clean:执行清理前的工作
- clean:清理上一次构建生成的所有文件
- post-clean:执行清理后的文件
default构建项目(最核心)
- compile
- test
- package
- install
#site生成项目站点
- pre-site:在生成项目站点前要完成的工作
- site:生成项目的站点文档
- post-site:在生成项目站点后要完成的工作
- site-deploy:发布生成的站点到服务器上
POM文件
放在工程目录下。
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>反写的公司网址+项目名</groupId>
<artifactId>项目名+模块名</artifactId>
<!-- 第一个0 表示大版本号
第二个0 表示分支版本号
第三个0 表示小版本号
0.0.1
snapshot快照
alpha内部测试
beta公测
Release稳定
GA正式发布
-->
<version>项目的版本</version>
<!--打包方式,不指定默认是jar
war zip pom
-->
<packaging></packaging>
<!--项目描述名-->
<name></name>
<!-- 项目地址-->
<url></url>
<!--项目描述-->
<description></description>
<!--开发人员-->
<developers></developers>
<!--许可信息-->
<licenses></licenses>
<!--组织-->
<organization></organization>
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<type></type>
<!--依赖范围-->
<scope></scope>
<!--true|false,设置依赖是否可选,默认false.子项目默认 继承,true必须显式地引入该依赖-->
<optional></optional>
<!--排除依赖传递列表-->
<exclusions>
<exclusion>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<!--依赖管理-->
<dependencyManagement>
<dependencies>
<dependency>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<!--插件列表-->
<plugins>
<plugin>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</plugin>
</plugins>
</build>
<!--继承-->
<parent></parent>
<!--指定多个模块,一起编译-->
<modules>
<module></module>
</modules>
</project>
scope
- compile:默认的范围,编译测试运行都有效
- provided:在编译和测试时有效
- runtime:在测试和运行时有效
- test:只在测试时有效
- system:编译和测试时有效(与本机系统相关联,可移植性差)
- import:导入的范围,它只是用在dependencyManagment中,表示从其他的pom中导入dependecy的配置
import例子代码:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>maven</groupId>
<artifactId>B</artifactId>
<packaging>pom</packaging>
<name>B</name>
<version>1.0</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>maven</groupId>
<artifactId>A</artifactId>
<version>1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>test</groupId>
<artifactId>d</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>test</groupId>
<artifactId>a</artifactId>
<version>1.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>test</groupId>
<artifactId>c</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
</project>
说明:所有A的管理依赖项将被并入B,除了d,因为它在这个pom中定义。
依赖传递
共三个工程A、B、C。
1)A打包入库,B依赖A;
2)B打包入库,C依赖B;
3)查看C工程的Maven Dependencies,发现C依赖了工程A。若不需要依赖A,则在C工程目录的POM文件中的依赖B项下面添加如下代码:
<dependency>
<groupId>B的工程id</groupId>
<artifactId>B的模块id</artifactId>
<version>B的版本</version>
<exclusions>
<exclusion>
<groupId>A的工程id</groupId>
<artifactId>A的模块id</artifactId>
<!--注意此处不需要添加A的version-->
</exclusion>
</exclusions>
</dependency>
依赖冲突
两条原则:
1. 短路优先
(1)A->B->C->X(jar)
(2)A->D->X(jar)
A工程优先依赖(2)。
2. 先声明优先使用
如果路径长度相同,则谁先声明,先解析谁。
聚合和继承
聚合
使用标签。
<modules>
<module>../bge</module>
<module>../nage</module>
<module>../shanji</module>
</modules>
继承
父POM代码如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>shen.one</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>parent</name>
<url>http://maven.apache.org</url>
<properties>
<junit.version>3.8.1</junit.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!--父POM将依赖关系加入到Manangement中去,父POM不做代码编写-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
子POM代码如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>shen.one</groupId>
<artifactId>bge</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>bge</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!--继承的代码如下-->
<parent>
<groupId>shen.one</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--特别注意: 需要填写父POM路径-->
<relativePath>../parent/pom.xml</relativePath>
</parent>
<!--继承的代码如上-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
</dependencies>
</project>