概述
Maven 是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,
报告和文档的软件项目管理工具。
maven项目结构
| 12
 3
 4
 5
 6
 7
 
 | └─src|   ├─main
 |   │  ├─java
 |   │  └─resources
 |   └─test
 |       └─java
 └─pom.xml
 
 | 
maven的坐标与仓库
maven中任何依赖、插件、项目输出等够成为构件,构件通过坐标唯一标识;
镜像仓库,镜像仓库的修改在maven的conf目录下setting.xml中的mirros节点
| 12
 3
 4
 5
 6
 7
 8
 
 | <mirror><id>mirrorId</id>
 《mirror of标识为那个仓库添加镜像,这里也可以使用 * 代表所有仓库,一旦使用了镜像仓库,所有对原仓库的访问都将转为对镜像仓库的访问》
 <mirrorOf>repositoryId</mirrorOf>
 <name>Human Readable Name for this Mirror.</name>
 <url>http://my.repository.com/repo/path</url>
 </mirror>
 </mirrors>
 
 | 
默认情况下,maven的仓库在C:\Users\Administrator.m2\repostory,一般不将仓库放在C盘,若需要修改位置,修改maven的conf中的settings.xml中
| 1
 | <localRepository>D:/SoftWare/ThirdPart4Java/Maven350/Responsitory</localRepository>
 | 
pom.xml
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 
 | <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>
 
 
 
 
 
 
 
 
 <version>0.0.1-SNAPSHOT</version>
 
 <packaging>jar</packaging>
 
 
 <name>hi</name>
 
 <url>http://maven.apache.org</url>
 
 <description></description>
 
 <developers></developers>
 
 <license></license>
 
 <organization></organization>
 
 <properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 </properties>
 
 
 <dependencies>
 
 <dependency>
 <groupId>junit</groupId>
 <artifactId>junit</artifactId>
 <version>3.8.1</version>
 
 
 
 <scope>test</scope>
 
 <optional>true/false</optional>
 
 <exclusions></exclusions>
 </dependency>
 </dependencies>
 
 
 
 
 <dependencyManagement></dependencyManagement>
 
 <build>
 
 <plugins>
 <plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-source-plugin</artifactId>
 <version>2.4</version>
 <executions>
 <execution>
 <phase>package</phase>
 <goals>
 <goal>jar-no-fork</goal>
 </goals>
 </execution>
 </executions>
 </plugin>
 </plugins>
 </build>
 
 <parent></parent>
 
 <modules></modules>
 </project>
 
 | 
maven项目生命周期
一个完成的项目周期包括:清理clean、编译compile、测试test、打包package、集成测试、验证test、部署deploy
maven的三套生命周期
- clean,清理项目  - 
- pre-clean,执行清理前的工作
- clean,清理上一次生成的所有文件
- post-clean, 执行清理后的文件
 
- default,构建项目  - 
- compile
- test
- package
- install
 
- site,生成项目站点  - 
- pre-site,生成站点前需要完成的工作
- site,生成项目的站点文档
- post-site,生成站点后需要完成的工作
- site-deploy,发不生成的站点到服务器
 
mvn基本命令
- mvn compile,表示编译项目 
- mvn test,运行test 
- mvn package,为项目生成jar或war
- mvn clean,删除target文件
- mvn install,安装本地jar到目录
- mvn archetype:generate,自动创建符合maven要求的目录结构
- mvn archetype:generate
 -DgroupId=xxx(这里一般就是组织名,例如公司网址反写+项目名)
 -DartifactId=sss(这里一般是项目在公司的唯一标识,例如项目名-模块名)
 -Dversion=11111 指定版本号
 -Dpackage=dddddd代码所在的包
- mvn site, 在target目录生成项目站点文档
maven模板创建Java项目
mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name}-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
这告诉 Maven 来从 maven-archetype-quickstart 模板创建 Java 项目。
安装和引用jar包
安装现有jar到本地maven仓库
mvn install:install-file -Dfile=xxx-version.jar -DgroupId=groupId -DartifactId=artifactId -Dversion={version} -Dpackaging=jar
在pom.xml中引用本地仓库包
| 12
 3
 4
 5
 
 | <dependency><groupId>com.google.code</groupId>
 <artifactId>kaptcha</artifactId>
 <version>2.3</version>
 </dependency>
 
 | 
运行jar包
用mvn package导出的包中,如果没有在pom文件中将依赖包打进去,是没有依赖包。
- 打包时指定了主类,可以直接用java -jar xxx.jar。
- 打包是没有指定主类,可以用java -cp xxx.jar 主类名称(绝对路径)。
- 要引用其他的jar包,可以用java -cp $CLASSPATH:xxxx.jar 主类名称(绝对路径)。
生成项目站点文档
mvn site
maven 依赖冲突
例如A/B分别依赖两个不同版本的构建,这里就会存在冲突,maven采用如下的原则 
- 短路优先, - 
- A -> B -> C -> X(jar); 
- A -> D -> X(jar); - 这里,maven将采用第二个路径 
 
- 路径相同,则先声明先依赖 
maven聚合
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 
 | <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>com.hongxing</groupId>
 <artifactId>hongxing.aggreation</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>pom</packaging>
 
 <name>hongxing.aggreation</name>
 <url>http://maven.apache.org</url>
 
 <properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 </properties>
 
 <modules>
 <module>../hongxing-bege</module>
 <module>../hongxing-nange</module>
 <module>../hongxing-shanji</module>
 </modules>
 </project>
 
 | 
maven继承
新建一个 maven 项目(dependencyManagement 标签中的 dependency 并不会运行)
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 
 | <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>com.hongxing</groupId>
 <artifactId>hongxing-parent</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 
 <packaging>pom</packaging>
 
 <name>hongxing-parent</name>
 <url>http://maven.apache.org</url>
 
 <properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 
 <junit.version>3.8.1</junit.version>
 </properties>
 
 <dependencyManagement>
 <dependencies>
 <dependency>
 <groupId>junit</groupId>
 <artifactId>junit</artifactId>
 
 <version>${junit.version}</version>
 <scope>test</scope>
 </dependency>
 </dependencies>
 </dependencyManagement>
 </project>
 
 | 
另一个项目中
| 12
 3
 4
 5
 
 | <parent><groupId>com.hongxing</groupId>
 <artifactId>hongxing-parent</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 </parent>
 
 |