概述
Maven 是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,
报告和文档的软件项目管理工具。
maven项目结构
1 2 3 4 5 6 7
| └─src | ├─main | │ ├─java | │ └─resources | └─test | └─java └─pom.xml
|
maven的坐标与仓库
maven中任何依赖、插件、项目输出等够成为构件,构件通过坐标唯一标识;
镜像仓库,镜像仓库的修改在maven的conf目录下setting.xml中的mirros节点
1 2 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
1 2 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中引用本地仓库包
1 2 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聚合
1 2 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 并不会运行)
1 2 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>
|
另一个项目中
1 2 3 4 5
| <parent> <groupId>com.hongxing</groupId> <artifactId>hongxing-parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent>
|