时间:2020-11-05来源:www.pcxitongcheng.com作者:电脑系统城
maven 命令行打包
mvn -v, --show-version
现在最新的maven版本是 3.6,我这里用的还是 2017 年下载的 3.1.1 版本(虽然有点过时,但是大版本不变,指令基本一样)
mvn -h, --help
使用 help 命令可以看到 maven 命令的帮助文档,下面主要介绍两个常用的指令 —— D 和 P。
mvn -D, --define <arg>
mvn -DpropertyName=propertyValue clean package
可以用来临时定义属性和值。如果 pom.xml 中已经有该属性,那么会替换掉 pom.xml 中的值。
如果需要定义多个变量,可以用空格分隔mvn -DpropA=valueA -DpropB=valueB -DpropC=valueC clean package
当然这个属性也可以直接在 pom.xml 文件下配置
?1 2 3 4 5 6 7 8 |
< project > < properties > < project.build.sourceEncoding >UTF-8</ project.build.sourceEncoding > < android.sdk.path >C:\software\android\sdk</ android.sdk.path > < maven.test.skip >true</ maven.test.skip > < maven.javadoc.skip >true</ maven.javadoc.skip > </ properties > </ project > |
mvn -P, --activate-profiles <arg>
P 表示 Profiles 配置文件,需要在 <profile> 标签中指定 <id> 才能用 -P 使之生效。
假如 pom.xml 如下:
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
< project > ... < profiles > < profile > < id >test</ id > ... </ profile > < profile > < id >dev</ id > ... </ profile > < profile > < id >prod</ id > ... </ profile > </ profiles > ... </ project > |
那么打包时执行 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 项目
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
--- 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 配置
?1 2 |
@echo off mvn clean package -Dmaven.test.skip= true javadoc:javadoc -Pdev |
案例二
将模块A生成的 jar,复制到模块B的 libs 目录下。
安装模块到 maven 仓库。
1 2 3 |
@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来决定是否引用。
对不同的配置赋予不同的属性
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
< profiles > < profile > < id >dev</ id > < properties > < mysql.url >http://localhost:3306</ mysql.url > </ properties > < activation > < activeByDefault >true</ activeByDefault > </ activation > </ profile > < profile > < id >prod</ id > < properties > < mysql.url >http://192.168.1.10:3306</ mysql.url > </ properties > </ profile > </ profiles > |
activation 元素用来指定激活条件。当没有指定条件,然后指定 activeByDefault 为 true 的时候,就表示没有指明 profile 的情况下默认激活。也就是说 mvn package
将使用 dev 的配置,而 mvn package -P prod
的时候使用的才是 prod 的配置。
根据不同配置使用不同的源文件
?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 |
< profiles > < profile > < id >dev</ id > < properties > < debug.enable >true</ debug.enable > </ properties > < plugin > < artifactId >maven-resources-plugin</ artifactId > < version >2.6</ version > < executions > < execution > < id >copy-id</ id > < goals > < goal >copy-goal</ goal > </ goals > < phase >validate</ phase > < configuration > < outputDirectory >${basedir}/src/com/companyName/global/</ outputDirectory > < resources > < directory >${basedir}/profiles/dev/</ directory > < filtering >true</ filtering > < includes > < include >**/*.java</ include > </ includes > </ resources > </ configuration > </ execution > </ executions > </ plugin > </ profile > </ profiles > |
然后在 profiles/dev 目录下新建 java 文件
?1 2 3 |
(略) 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为需要替换
到此这篇关于Maven 命令行打包 和 pom.xml的常用配置详解的文章就介绍到这了
2024-04-11
台式机电脑如何连接外接显示器2024-04-11
小新系列打印机手机配置网络的方法教程2024-04-11
Thinkpad 笔记本F1-F12快捷键分别是什么功能ThinkPad蓝牙鼠标如何配对解答步骤41U5008鼠标驱动官网地址: https://support.lenovo.com/en_US/downloads/detail.page?&LegacyDocID=MIGR-67201 第一种方式是比较传统的:使...
2024-04-11
故障现象: USB设备U盘、移动硬盘等插入后提示无法识别的设备,确认设备本身正常,设备可加电,或插入设备后加电但无任何反应,无法使用。新型号机器多表现为黄色USB接口存在此问题,...
2024-04-11