Maven项目中如何配置pom.xml
创始人
2024-11-18 13:01:39
0次

maven 命令行打包

 mvn -v, --show-version

现在最新的maven版本是 3.6,我这里用的还是 2017 年下载的 3.1.1 版本(虽然有点过时,但是大版本不变,指令基本一样)

Maven项目中如何配置pom.xml

Maven项目中如何配置pom.xml

mvn -h, --help

使用 help 命令可以看到 maven 命令的帮助文档,下面主要介绍两个常用的指令 —— D 和 P。

Maven项目中如何配置pom.xml

mvn -D, --define

mvn -DpropertyName=propertyValue clean package 可以用来临时定义属性和值。如果 pom.xml 中已经有该属性,那么会替换掉 pom.xml 中的值。

如果需要定义多个变量,可以用空格分隔
mvn -DpropA=valueA -DpropB=valueB -DpropC=valueC clean package

当然这个属性也可以直接在 pom.xml 文件下配置


	
		UTF-8
		C:\software\android\sdk
		true
		true
	

mvn -P, --activate-profiles

P 表示 Profiles 配置文件,需要在 标签中指定 才能用 -P 使之生效。

假如 pom.xml 如下:


	...
	
		
			test
			...
		
		
			dev
			...
		
		
			prod
			...
		
	
	...

那么打包时执行 mvn clean package -P prod 将只激活 prod 环境的 profile 配置(也就是说此时 test 和 dev 的配置不会生效)

mvn package 与 mvn install 的区别

命令含义
mvn clean删除 target 目录
mvn package把 jar 打到本项目的 target 目录下
mvn install把 jar 打到本项目的 target 目录下,之后再将它安装到本地的 maven 仓库中

mvn 打包插件的执行顺序

我这里用的是 maven 3.1.1 打包 android 项目

--- maven-clean-plugin:2.5:clean (default-clean)
--- maven-install-plugin:2.4:install (default-install)
>>> maven-javadoc-plugin:2.6.1:javadoc (default-cli)
<<< maven-javadoc-plugin:2.6.1:javadoc (default-cli)
--- maven-javadoc-plugin:2.6.1:javadoc (default-cli)
--------------------------------------------------------------
--- maven-clean-plugin:2.5:clean (default-clean)
--- maven-resources-plugin:2.6:copy-resources (copy-src)
--- android-maven-plugin:3.8.0:generate-sources (default-generate-sources)
--- maven-resources-plugin:2.6:copy-resources (default-resources)
--- maven-compiler-plugin:2.3.1:compile (default-compile)
--- android-maven-plugin:3.8.0:proguard (default-proguard)
--- maven-resources-plugin:2.6:testResources (default-testResources)
--- maven-compiler-plugin:2.3.1:testCompile (default-testCompile)
--- maven-surefire-plugin:2.14:test (default-test)
--- maven-jar-plugin:2.6:jar (default-jar)
--- android-maven-plugin:3.8.0:apklib (default-apklib)
--- maven-install-plugin:2.3.1:install-file (custom-install)
--- maven-antrun-plugin:1.3:run (to-lib-directory)
>>> maven-javadoc-plugin:2.9:javadoc (default-cli)
--- maven-resources-plugin:2.6:copy-resources (copy-src)
--- android-maven-plugin:3.8.0:generate-sources (default-generate-sources)
<<< maven-javadoc-plugin:2.9:javadoc (default-cli)
--- maven-javadoc-plugin:2.9:javadoc (default-cli)
插件说明
maven-clean-plugin删除已有target目录
maven-resources-plugin复制和替换文件
maven-compiler-plugin编译所有源文件生成class文件至target\classes目录下
maven-surefire-plugin运行测试用例
maven-jar-plugin对编译后生成的文件进行打包
     包名称默认为:artifactId-version-SNAPSHOT.jar,保存在 target 目录下
maven-javadoc-plugin生成文档
android-maven-plugin生成、混淆 Android 的类文件(apklib是和aar差不多,都是将类和资源打在一起)

实战

案例一

使用 mvn 打包,并跳过测试,然后生成文档,使用 dev 配置

@echo off
mvn clean package -Dmaven.test.skip=true javadoc:javadoc -Pdev

案例二

将模块A生成的 jar,复制到模块B的 libs 目录下。
安装模块到 maven 仓库。

@echo off
copy /y "moduleA/target/target.jar" "moduleB/libs/baseA.jar"
call mvn install:install-file -Dfile=baseA.jar -DgroupId=com.example -DartifactId=baseA -Dversion=1.0.1 -Dpackaging=jar

默认情况下,cmd 的命令发起调用后就立即返回了。而 CALL 是一个调用外部批处理程序的指令,类似于函数调用的执行逻辑,它会一直等到函数执行结束才返回。

pom.xml的常用配置

 denpendencyManagement 与 pluginManagement

denpendencyManagement是用于管理项目jar包依赖,pluginManagement是用于管理plugin。
它们的作用是列出依赖的jar包或者plugin包,让子pom来决定是否引用。

对不同的配置赋予不同的属性


	
		dev
		
			http://localhost:3306
		
		
			true
		
	
	
		prod
		
			http://192.168.1.10:3306
		
	

activation 元素用来指定激活条件。当没有指定条件,然后指定 activeByDefault 为 true 的时候,就表示没有指明 profile 的情况下默认激活。也就是说 mvn package 将使用 dev 的配置,而 mvn package -P prod 的时候使用的才是 prod 的配置。

根据不同配置使用不同的源文件


	
		dev
		 
   true 
   
		
			maven-resources-plugin
			2.6
			
				
					copy-id
					
						copy-goal
					
					validate
					
						${basedir}/src/com/companyName/global/
						
							${basedir}/profiles/dev/
							true
							
								**/*.java
							
						
					
				
			
		
	

然后在 profiles/dev 目录下新建 java 文件

(略)
	private boolean isDebugEnable = ${debug.enable}
	(略)

执行打包命令 mvn clean package -DskipTests -Pdev,就可以看到 /profiles/dev 目录下的 java 文件全部被复制到了 /src/com/companyName/global 目录下了,并且 isDebugEnable 的值也被替换了。

配置项说明:

parse 用来指明具体在 maven 的哪个生命周期执行该任务

maven 的生命周期表

生命周期阶段描述
validate验证项目是否正确,并且所有必要的信息可用于完成构建过程
initialize建立初始化状态,例如设置属性
generate-sources产生任何的源代码包含在编译阶段
process-sources处理源代码,例如,过滤器值
generate-resources包含在包中产生的资源
process-resources复制和处理资源到目标目录,准备打包阶段
compile编译该项目的源代码
process-classes从编译生成的文件提交处理,例如:Java类的字节码增强/优化
generate-test-sources生成任何测试的源代码包含在编译阶段
process-test-sources处理测试源代码,例如,过滤器任何值
test-compile编译测试源代码到测试目标目录
process-test-classes处理测试代码文件编译生成的文件
test运行测试使用合适的单元测试框架(JUnit)
prepare-package执行必要的任何操作的实际打包之前准备一个包
package提取编译后的代码,并在其分发格式打包,如JAR,WAR或EAR文件
pre-integration-test完成执行集成测试之前所需操作。例如,设置所需的环境
integration-test处理并在必要时部署软件包到集成测试可以运行的环境
pre-integration-test完成集成测试已全部执行后所需操作。例如,清理环境
verify运行任何检查,验证包是有效的,符合质量审核规定
install将包安装到本地存储库,它可以用作当地其他项目的依赖
deploy复制最终的包到远程仓库与其他开发者和项目共享

inherited 用来指明 execution 是否传递到子 pom.xml 里

filtering属性用来表示资源文件中的 “EL表达式占位符” 是否需要被替换,true为需要替换

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...