博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
maven常用插件
阅读量:6319 次
发布时间:2019-06-22

本文共 9575 字,大约阅读时间需要 31 分钟。

hot3.png

Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven-compiler-plugin完成的。进一步说,每个任务对应了一个插件目标(goal),每个插件会有一个或者多个目标,例如maven-compiler-plugin的compile目标用来编译位于src/main//目录下的主源码,testCompile目标用来编译位于src/test/java/目录下的测试源码。

用户可以通过两种方式调用Maven插件目标。第一种方式是将插件目标与生命周期阶段(lifecycle phase)绑定,这样用户在命令行只是输入生命周期阶段而已,例如Maven默认将maven-compiler-plugin的compile目标与 compile生命周期阶段绑定,因此命令mvn compile实际上是先定位到compile这一生命周期阶段,然后再根据绑定关系调用maven-compiler-plugin的compile目标。第二种方式是直接在命令行指定要执行的插件目标,例如mvn archetype:generate 就表示调用maven-archetype-plugin的generate目标,这种带冒号的调用方式与生命周期无关。

一、变量-自定义变量及内置变量

1.自定义变量

tools
UTF-8

2.内置变量

${basedir} 项目根目录    ${project.build.directory} 构建目录,缺省为target    ${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes    ${project.build.finalName} 产出物名称,缺省为${project.artifactId}-${project.version}    ${project.packaging} 打包类型,缺省为jar    ${project.xxx} 当前pom文件的任意节点的内容

二、常见插件配置

clean插件

org.apache.maven.plugins
maven-clean-plugin
2.5
F:/logs
../message-test
spy.log
../message-test/target

单元测试插件

org.apache.maven.plugins
maven-surefire-plugin
2.16
true

skip=true,表示跳过单元测试,相当于-Dmaven.test.skip=true。

但是在执行mvn test -Dtest时,也会被跳过。解决方法是用excludes跳过所有测试,而不是用skipTests。

org.apache.maven.plugins
maven-surefire-plugin
2.16
**/*.java

即跳过所有test。这样再执行mvn test -Dtest就没有问题了。

资源文件插件

org.apache.maven.plugins
maven-resources-plugin
2.6
copy-resources
validate
copy-resources
${basedir}/target/test-classes
${basedir}/src/main/webapp/WEB-INF/config
true
**/*.txt
**/*.properties
**/*.xml
src/test/resources
**/*.txt
**/*.xml
**/*.properties

为了使项目结构更为清晰,Maven区别对待Java代码文件和资源文件,maven-compiler-plugin用来编译Java代码,maven-resources-plugin则用来处理资源文件。默认的主资源文件目录是src/main/resources,很多用户会需要添加额外的资源文件目录,这个时候就可以通过配置maven-resources-plugin来实现。此外,资源文件过滤也是Maven的一大特性,你可以在资源文件中使用${propertyName}形式的Maven属性,然后配置maven-resources-plugin开启对资源文件的过滤,之后就可以针对不同环境通过命令行或者Profile传入属性的值,以实现更为灵活的构建。

编译插件

org.apache.maven.plugins
maven-compiler-plugin
3.1
1.6
1.6
UTF-8
128m
512m
true
1.3

默认编译插件

拷贝依赖jar包到指定目录

org.apache.maven.plugins
maven-dependency-plugin
2.6
copy-dependencies
compile
copy-dependencies
${project.build.directory}/lib
false
true

maven-dependency-plugin最大的用途是帮助分析项目依赖,dependency:list能够列出项目最终解析到的依赖列表,dependency:tree能进一步的描绘项目依赖树,dependency:analyze可以告诉你项目依赖潜在的问题,如果你有直接使用到的却未声明的依赖,该目标就会发出警告。maven-dependency-plugin还有很多目标帮助你操作依赖文件,例如dependency:copy-dependencies能将项目依赖从本地Maven仓库复制到某个特定的文件夹下面。

项目打成jar包

打成jar包插件:
org.apache.maven.plugins
maven-jar-plugin
2.4
true
lib/
com.*.MainClass
打成war包插件:
org.apache.maven.plugins
maven-war-plugin
2.1.1
src/main/webapp
**/*.jpg

默认打包插件

运行插件

org.codehaus.mojo
exec-maven-plugin
1.2.1
java
com.yunzero.App

如果我们运行的时候需要提供一些输入的参数,可以通过configuration的元素里添加。这样后续要执行这个程序时,我们只需要在命令行执行如下命令:mvn exec:java ,然后程序就可以运行起来了。

自定义打包

maven-assembly-plugin
2.4.1
make-zip
package
single
src/assembly/assembly.xml

assembly.xml文件

distribution
tar.gz
${project.basedir}\src\main\resources
\
${project.basedir}\src\bin
\bin
true
lib
runtime

生成的lib文件夹下放该项目的所有依赖以及该服务jar包,src/main/bin文件夹下我们一般放start.sh和stop.sh两个脚本文件用来开启和关闭该服务,打包后直接放到根目录下。生成的tar.gz文件的名字为:maven-assembly-plugin插件中配置的finalName-assembly.xml配置的id(若assembly中没有指定id,则只有前半部分).

不同环境获取不同配置文件

org.codehaus.mojo
properties-maven-plugin
1.0.0
profiles/${runtime.env}/jdbc.properties
profiles/${runtime.env}/redis.properties
profiles/${runtime.env}/batch.properties
profiles/${runtime.env}/config.properties
initialize
read-project-properties

随着项目的不断迭代,我们的资源配置项将会变得更多,这个会直接影响到pom.xml的体积膨胀;此外,如果项目目标部署环境比较多,pom.xml将会膨胀得更快,更加难以维护。为了解决这个问题,我们需要将这些配置信息独立出来,并按照不同环境进行归类,使用properties-maven-plugin就会达到这个效果。 

示例用法(将每个环境的信息放在不同的目录下,然后在mvn package切换不同的profile实现去指定目录读取配置信息,用读取到的value去替换资源配置文件的占位符)

maven-shade-plugin

org.apache.maven.plugins
maven-shade-plugin
3.0.0
package
shade
batch
true
jar-with-dependencies
com.fastjrun.demospring4.BatchInit
META-INF/spring.handlers
META-INF/spring.schemas
META-INF/spring.tooling
*:*
META-INF/*.SF
META-INF/*.DSA
META-INF/*.RSA

有时候,我们需要将所有配置文件和依赖库文件全部放在一个jar包中,运维的同事只需要执行java -jar batch.jar即可完成启动。虽然使用maven-assembly-plugin也可以做到这一点,但是在读取配置文件的时候有可能会遇到一些问题,这个时候,我们可能需要使用到maven-shade-plugin这个插件,经笔者实践按照如下示例用法配置确实可用;当然本示例配置了mainClass,直接执行java -jar batch.jar确实没问题,但如果执行java com.fastjrun.demospring4.BatchInit -classpath batch.jar也是可以的。

 

更多插件请查看:

http://maven.apache.org/plugins/index.html?spm=a2c4e.11153940.blogcont26377.4.49b44321W1482B

转载于:https://my.oschina.net/u/2000675/blog/811147

你可能感兴趣的文章
【转】从知乎上看到“全栈开发者”讨论之后的自黑
查看>>
Java-IO流
查看>>
Linux入门-6 Linux网络基本配置
查看>>
洗礼灵魂,修炼python(22)--自定义函数(3)—函数作用域,闭包
查看>>
newcoder Tachibana Kanade Loves Probability(小数点后第k位)题解
查看>>
vue项目未加载完成前显示loading...
查看>>
leetcode981
查看>>
安装DNS Server linux 【转载】
查看>>
windows 与linux 下用C++读取sqlite实现文件复制(一)
查看>>
IOS 5 中为什么outlet 输出口总是设定成弱类型(weak)呢
查看>>
Read-Copy Update (RCU)
查看>>
基于centos系统,系统基本检查及巩固
查看>>
在以太坊上如何取消/修改已经提交的交易
查看>>
Android IOS WebRTC 音视频开发总结(十九)-- kurento
查看>>
reshape2 数据操作 数据融合( cast)
查看>>
第一章、关于SQL Server数据库的备份和还原(sp_addumpdevice、backup、Restore)
查看>>
八、主从复制
查看>>
深入理解RunLoop 整理资料
查看>>
俄罗斯方块
查看>>
LabVIEW将字符串转化为十进制
查看>>