Apache Maven,是一个软件(特别是java软件)项目及自动构建工具,由Apache软件基金会所提供。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、测试报告和文档等。
maven有规定好的目录结构,项目必须严格遵从。一个 maven 项目在默认情况下会产生 JAR 文件,另外 ,编译后 的 classes 会放在 ${basedir}/target/classes 下面, JAR 文件会放在${basedir}/target 下面。
目录 | 作用 |
${basedir} | 存放 pom.xml和所有的子目录 |
${basedir}/src/main/java | 项目的 java源代码 |
${basedir}/src/main/resources | 项目的资源,比如说 property文件 |
${basedir}/src/test/java | 项目的测试类,比如说 JUnit代码 |
${basedir}/src/test/resources | 测试使用的资源 |
一,maven配置文件
全局配置文件:{installed_dir}/conf/settings.xml
优先级更高的配置文件:${user.home}/.m2/settings.xml
二,maven本地和远程仓库
本地仓库是远程仓库的一个缓冲和子集,当你构建Maven项目的时候,首先会从本地仓库查找资源,如果没有,那么Maven会从远程仓库下载到你本地仓库。这样在你下次使用的时候就不需要从远程下载了。如果你所需要的jar包版本在本地仓库没有,而且也不存在于远程仓库,Maven在构建的时候会报错,这种情况可能发生在有些jar包的新版本没有在Maven仓库中及时更新。
1,自定义的本地仓库路径
如下配置,在setting.xml文件中,本地仓库有默认配置,在${user.home}/.m2/repository目录中。
当然,我们可以在settings.xml中自定义本地仓库,加入以下字段即可:
也可以通过命令行的模式指定本地仓库:(不推荐这么做)
# mvn clean install -Dmaven.repo.local=/home/juven/myrepo/
2,自定义远程仓库
默认远程仓库配置:
在apache-maven-3.0.4/lib/maven-model-builder-3.0.4.jar文件中org/apache/maven/model/pom-4.0.0.xml文件中定义了中央仓库:
setting.xml配置文件中定义远程仓库,优先级高,配置如下:
pom.xml的作用范围限于一个项目, 但一个公司/组织通常不只开发一个项目,那么为了避免重复配置,那么我们可以把一些公共配置放在${MAVEN_HOME}/conf/setting.xml(或${user.home}/.m2/setting.xml中。下面是在setting.xml中配置一个远程仓库的例子.
这里通过
在实际的操作过程中,setting.xml配置的远程仓库,可以是通过nexus建立的公司自己的仓库。
pom.xml文件定义远程仓库,优先级最高,配置如下:
在pom中允许配置多个repository和 plugin repository,其中
告诉Maven可以从这个仓库下载snapshots版本的构件。而如果有
Maven在使用第三方构件和插件时是分开来配置的,所以如果我们也希望插件的下载也通过我们自己的仓库来下载,那么我们就需要配置pluginRepository.至于
三,maven发布jar包到nexus服务器
1),在pom.xml文件中可以定义如下代码:
2)确保Nexus服务器的Releases仓库属性正确。
进入Nexus控制台,用admin登录。点开“Views/Repositories”选“Repositories”,在Repositories列表中选择Releases,点configuration,Deployment Policy默认为“Disable Redeploy”,点击修改为“Allow Redeploy”并保存。
3)修改用户目录下的settings.xml文件。
settings.xml文件路径为${user.home}/.m2或%{m2_home}/conf/。Windows7系统目录为C:/Users/用户名/.m2。
找到
注意:server的id必须和第1)点中的repository的id一致。用户名最好用deployment。
4)重新设定用户deployment的密码。
进入Nexus控制台,点开Security选Users,在用户列表中右键点击deployment用户,选Set Password重新设定deployment的密码为“deployment”,当然也可设置为其他,只要与第3)点server配置一致即可。
5)在工程主目录下(POM文件所在目录)运行“mvn deploy:deploy”即能实现版本的构建和发布。
四,maven使用assembly实现自定义打包
pom.xml中设置如下:
其中
appendAssemblyId属性控制是否在生成的打包文件的文件名中包含assembly id。
descriptor属性指定maven-assembly-plugin的配置文件,当然我设置的是src/main/assemble/package.xml.容许使用多个,功能强大当然用法也复杂,对于简单情况一个足矣。
execution的设置是为了将maven-assembly-plugin继承到标准的maven打包过程中,这样在运行命令mvn package时就会执行maven-assembly-plugin的操作,从而实现我们需要的自定义打包,这样就不用再去执行mvn assembly:assembly指令了。
五,maven的常用命令和参数、
1,常用参数
mvn -e 显示详细错误
mvn -U 强制更新snapshot类型的插件或依赖库(否则maven一天只会更新一次snapshot依赖)
mvn -o 运行offline模式,不联网更新依赖
mvn -N 仅在当前项目模块执行命令,关闭reactor
mvn -pl module_name在指定模块上执行命令
mvn -ff 在递归执行命令过程中,一旦发生错误就直接退出
mvn -Dxxx=yyy指定java全局属性
mvn -Dwtpversion=2.0 指定maven版本
mvn -Dmaven.test.skip=true 如果命令包含了test phase,则忽略单元测试
mvn -DuserProp=filePath 指定用户自定义配置文件位置
mvn -DdownloadSources=true -Declipse.addVersionToProjectName=true eclipse:eclipse 生成eclipse项目文件,尝试从仓库下载源代码,并且生成的项目包含模块版本(注意如果使用公用POM,上述的开关缺省已打开)
mvn -Pxxx引用profile xxx。profile的定义在pom.xml文件中,一般id为test或者product,一个是测试环境的配置,一个是线上环境的配置。配置如下:
2,常用命令
mvn compile 编译生成class文件
mvn test 运行程序中的单元测试
mvn clean 移除所有上一次构建生成的文件(例如test和target目录)
mvn package 打包编译后的代码,在target目录下生成package文件,默认会生成jar文件,如果有自定义打包策略,可以生成zip等类型文件。需要的依赖文件,会先从本地仓库找(linux默认为~/.m2/repository/),没有的话,再从远处仓库download
mvn install 在本地Repository中安装jar,方便本地其它项目使用。默认是安装打好的包到server的本地mvn仓库中,linux默认为~/.m2/repository/
常用的打包命令:
# mvn -U -Dmaven.test.skip=true -P test -f pom.xml clean package install