一、安装配置
mvn help:system 从中央库中下载资源
二、下载m2e
在 eclipse>help>install配置
注意:eclipse 4.5及以上版本,自带maven插件,在下载安装m2e之间,需将自带的卸载掉。
三、创建hello world
1.mvn clean compile 工程编译
编译文件放到工程 target/classes
2.mvn clean test 工程测试文件编译
测试文件放到工程 target/test-classes
3.mvn clean package 工程打包
打包到工程 target 下面
4.mvn clean install 工程安装
安装到本地仓库,一般路径:C:\Users\{用户}\.m2\repository
5.mvn clean deploy 将项目构建输出的构件部署到配置对应的远程仓库。
如果项目当前的版本是快照版本,则部署到快照版本仓库地址,否则就部署到发布版本仓库地址。
6.mvn clean install-U
使用命令行-U参数强制让Maven检查更新
7.mvn dependency:list 已解析依赖
mvn dependency:tree 依赖树
mvn dependency:analyze 分析当前项目的依赖
8.mvn install -Dmaven.test.skip=true 跳过执行测试
9.mvn help:describe -Dplugin:org.apache.maven.plugins:maven-compiler-plugin:2.1
获取插件详细信息
四、中央资源库
官方中央资源库
http://repo1.maven.org/maven2
五、使用 Archetype 生成项目的骨架,也就是工程的基本目录结构和pom.xml文件
archetype:原型
Maven3:mvn archetype:generate
Maven2:mvn org.maven.plugins:maven-archetype-plugin:2.0-alpha-5:generate
六、邮箱配置
email.protocol=smtps
email.host=smtp.qq.com
email.port=587
email.username=
email.password=
email.auth=true
email.systemEmail=
七、依赖调解
第一原则:路径最近则优先。
A->B->C->X(1.0) X(1.0)的路径长度为3
A->D->X(2.0) X(2.0)的路径长度为2
选X(2.0)
第二原则:第一声明者优先
A->B->Y(2.0) 路径长度为2
A->C->Y(1.0) 路径长度为2
选Y(2.0)
八、本地仓库
如果要自定义本地仓库目录地址,可以编辑文件~/.m2/settings.xml,设置localRepository元素的值为想要的仓库地址:
<settings>
<localRepository>D:\java\repository\</localRepository>
</settings>
九、远程仓库配置
POM中的repository 配置包括releases(发布)和snaphots(快照)。
<snapshots>
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
<checksumPolicy>ignore</checksumPolicy>
</snapshots>
updatePolicy 从远程仓库检查更新的频率,默认值daily,表示Maven每天检查一次。其值包括:never-从不检查更新;alawys-每次构建都检查更新;interval:X-每隔X分钟检查一次更新(X为任意整数)
checksumPolicy Maven验证校验和文件。warn\fail\ignore
1.远程仓库认证
1>POM文件、settings.xml
2>POM中的repository id 与 settings.xml文件中的server id 保持一致
2.部署至远程仓库
<distributionManagement>
<repository>
<id></id>
<name></name>
<url></url>
</repository>
<snapshotRepository>
<id></id>
<name></name>
<url></url>
</snapshotRepository>
</distributionManagement>
十、生命周期
1.Maven拥有三套项目独立的生命周期,分别为clean、default和site。
clean 生命周期的目的是清理项目
default 生命周期的目的是构建项目
site 生命周期的目的是建立项目站点
1>clean 生命周期的目的是清理项目,它包含三个阶段
pre-clean:执行一些清理前需要完成的工作
clean:清理上一次构建生成的文件
post-clean:执行一些清理后需要完成的工作。
2>default 生命周期
validate
initialize
generate-sources
process-sources 处理项目主资源文件。一般来说,是对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中。
generate-resources
process-resources
compile 编译项目的主源码。一般来说,是编译src/main/java目录下的java文件至项目输出的主classpath目录中。
process-classes
generate-test-srouces
process-test-sources 处理项目测试资源文件。一般来说,是对src/test/resources目录的内容进行变量替换等工作后,复制到项目输出的测试classpath目录中。
generate-test-resources
process-test-resource
test-compile 编译项目的测试代码。一般来说,是编译src/test/java目录下的java文件至项目输出的测试classpath目录中。
process-test-classes
test 使用单元测试框架进行测试,测试代码不会被打包或部署。
prepare-package
package 接受编译好的代码,打包成可发布的格式,如JAR
pre-integration-test
integration-test
post-integration-test
verify
install 将包安装到Maven本地仓库,供本地其他Maven项目使用
deploy 将最终的包复制到远程仓库,供其他开发人员和Maven项目使用
http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html 3>site 生命周期
pre-site 执行一些在生成项目站点之前需要完成的工作。
site 生成项目站点问文档
post-site 执行一些在生成项目站点之后需要完成的工作
site-deploy 将生成的项目站点发布到服务器上
十一、聚合
<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.juvenxu.mvnbook.account</groupId>
<artifactId>account-aggregator</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- packaging 必须为pom,否则就无法构建 -->
<packaging>pom</packaging>
<name>account-persist1</name>
<!--元素 modules 是实现聚合最核心的配置,每个module的值都是一个当前POM的相对目录-->
<modules>
<module>account-email</module>
<module>account-persist</module>
</modules>
</project>
1.聚合模块的目录结构分为:父子目录结构和平行目录结构。
2.约定由于配置
任何一个Maven项目都隐式地继承自超级POM。对于Maven3,超级POM在文件$MAVEN_HOME/lib/maven-model-builder-x.x.x.jar中的org/apache/maven/model/pom-4.0.0xml路径下。
3.裁剪反应堆
一般来说,用户会选择构建整个项目或者选择构建单个模块。
Maven 提供很多的命令行选项支持裁剪反应堆,输入mvn -h 可以看到这些选项:
1>-am, --also-make 同时构建所列模块的依赖模块
2>-amd, -also-make-dependents 同时构建依赖于所列模块的模块
3>-pl, --projects <arg> 构建制定的模块,模块间用逗号分隔
4>-rf, -resume-from <arg> 从指定的模块回复反应堆