项目构建--Maven--插件(四)

一、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                                                                                              
        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
                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目录:


项目构建--Maven--插件(四)_第1张图片
mvn package

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目录下:


项目构建--Maven--插件(四)_第2张图片
mvn package

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

你可能感兴趣的:(项目构建--Maven--插件(四))