一、maven-surefire-plugin
Maven本身并不是一个单元测试框架,Java世界中主流的单元测试框架为JUnit和TestNG。Maven所做的只是在构建执行到特定生命周期阶段的时候,通过插件来执行JUnit或者TestNG的测试用例。这一插件就是maven-surefire-plugin,可以称之为测试运行器(Test Runner),他能很好的兼容JUnit 3、JUnit 4以及TestNG。
我们知道,生命周期阶段需要绑定到某个插件的目标才能完成真正的工作,test阶段正是与maven-surefire-plugin的test目标相绑定了,这是一个内置的绑定。
在默认情况下,maven-surefire-plugin的test目标会自动执行测试源码路径(默认为src/test/java/)下所有符合一组命名模式的测试类。这组模式为:
**/Test*.java:任何子目录所有命名以Test开头的Java类。
**/*Test.java:任何子目录下所有命名以Test结尾的Java类。
**/*TestCase.java:任何子目录下所有命名以TestCase结尾的Java类。
只要将测试类按上述模式命名,Maven就能自动运行他们,用户也就不再需要定义测试集合(TestSuite)来聚合测试用例(TestCase)。关于模式需要注意的是,以Test结尾的测试类是不会得以自动执行的。
org.apache.maven.plugins
maven-surefire-plugin
2.18.1
true
二、maven-javadoc-plugin
生成javadoc文档包的插件 :
org.apache.maven.plugins
maven-javadoc-plugin
2.9.1
三、maven-compiler-plugin
maven是个项目管理工具,如果我们不告诉它我们的代码要使用什么样的jdk版本编译的话,它就会用maven-compiler-plugin默认的jdk版本来进行处理,这样就容易出现版本不匹配,以至于可能导致编译不通过的问题。
maven的默认编译使用的jdk版本貌似很低,使用maven-compiler-plugin插件可以指定项目源码的jdk版本,编译后的jdk版本,以及编码。
org.apache.maven.plugins
maven-compiler-plugin
3.1
1.8
UTF-8
true
true
true
true
1.3
128m
512m
-verbose -bootclasspath ${java.home}\lib\rt.jar
三、maven-antrun-plugin
拷贝文件:
官网:http://maven.apache.org/plugins/maven-antrun-plugin/
引入依赖(因为要实用if for 等等这样的标签)
ant-contrib
ant-contrib
1.0b3
引入插件(maven-antrun-plugin):
org.springframework.boot
spring-boot-maven-plugin
org.apache.maven.plugins
maven-compiler-plugin
1.7
maven-antrun-plugin
org.apache.ant
ant-jsch
1.8.2
copy
package
run
四、maven-dependency-plugin
maven-dependency-plugin是处理与依赖相关的插件。它有很多可用的goal,大部分是和依赖构建、分析和解决相关的goal,这部分goal可以直接用maven的命令操作,例如:mvn dependency:tree、mvn dependency:analyze 但是我们最常用到的是 dependency:copy dependency:copy-dependencies 及dependency:unpack dependency:unpack-dependencies 这四个。
org.apache.maven.plugins
maven-dependency-plugin
2.8
dependency:copy:将一系列在此插件内列出的artifacts ,将他们copy到一个特殊的地方,重命名或者去除其版本信息。这个可以解决远程仓库存在但是本地仓库不存在的依赖问题,copy操作可以用来将某个(些)maven artifact(s)拷贝到某个目录下。
org.apache.maven.plugins
maven-dependency-plugin
2.8
package
copy
比如把junit拷到libs目录下:
org.apache.maven.plugins
maven-dependency-plugin
2.8
package
copy
junit
junit
4.11
${project.build.directory}/libs
执行mvn package打包命令之后,会多出libs目录:
dependency:unpack :unpack和copy类似,只不过它会把拷来的包解开
org.apache.maven.plugins
maven-dependency-plugin
2.8
package
unpack
org.slf4j
slf4j-log4j12
1.7.7
junit
junit
4.11
${project.build.directory}/libs
lib
执行mvn package打包命令之后,slf4j复制到lib目录下,junit复制到libs目录下:
junit和slf4j-log4j12拷完以后,放到lib和libs下的不再是Jar包,还是Jar包里的内容。
copy 和 unpack操作是由要拷某个包,这个包需要具体指定要拷哪个包,与当前工程的依赖没有关系。copy-dependencies和它有点类似,但是它是用来拷当前工程的依赖包的,典型的,例如我们有一个web应用,当打成war包的时候,它所有的依赖也需要被打到应用中。
使用maven-dependency-plugin将EAR文件从我的多模块项目的所有子模块复制到相对于整个项目根目录的目录。
to-deploy/
my-project/
ear-module-a/
ear-module-b/
more-modules-1/
ear-module-c/
ear-module-d/
more-modules-2/
ear-module-e/
ear-module-f/
...
希望所有的EAR文件都可以从它们各自模块的目标目录中复制到my-project/../to-deploy最终:
to-deploy/
ear-module-a.ear
ear-module-b.ear
ear-module-c.ear
ear-module-d.ear
ear-module-e.ear
ear-module-f.ear
my-project/
...
我可以在每个模块中使用相对路径来完成,如下所示:
org.apache.maven.plugins
maven-dependency-plugin
copy
install
copy
${project.groupId}
${project.artifactId}
${project.version}
ear
../../to-deploy
${session.executionRootDirectory}在Maven 3.0.3的pom文件中适用于我。该属性将是您运行的目录,因此运行父项目,并且每个模块都可以获取该根目录的路径。
我把这个属性的插件配置放在父pom中,这样它就被继承了。我在配置文件中使用它,当我知道我要在父项目上运行Maven时,就会使用它。
org.apache.maven.plugins
maven-dependency-plugin
copy-artifact
package
copy
${project.groupId}
${project.artifactId}
${project.version}
${project.packaging}
${session.executionRootDirectory}/target/
五、docker-maven-plugin
用来构建Docker镜像。
docker-maven-plugin有两种使用方式,一种是使用Dockerfile文件,一种是不使用Dockerfile文件。
1.在 POM中指定构建信息(不使用Dockerfile文件)
在pom.xml中引入该插件
com.spotify
docker-maven-plugin
0.4.13
${project.name}:${project.version}
java
["java", "-jar", "/${project.build.finalName}.jar"]
true
/
${project.build.directory}
${project.build.finalName}.jar
默认情况下,该插件通过访问localhost:2375来连接本地docker,可以通过设置DOCKER_HOST 环境变量来连接docker.
DOCKER_HOST=tcp://:2375
2.使用Dockerfile文件
如果使用Dockerfile文件,必须指定dockerDirectory元素,那么 baseImage, maintainer, cmd and entryPoint这些元素也会被忽略。dockerDirectory元素所指定的内容将被复制到${project.build.directory}/docker下,resources元素则会复制除此之外的其它文件,例如项目jar文件。
com.spotify
docker-maven-plugin
0.4.13
${project.name}:${project.version}
docker
/
${project.build.directory}
${project.build.finalName}.jar
创建镜像
mvn clean package docker:build
推送镜像到Registry
mvn clean package docker:build -DpushImage
推送指定tag的镜像到Registry
mvn clean package docker:build -DpushImageTag