美文网首页实际工程实践
Maven常见插件和配置

Maven常见插件和配置

作者: Cheava | 来源:发表于2019-11-13 11:27 被阅读0次

    maven 生命周期中及对应插件

    maven 生命周期是指从初始化,编译,打包,发布的一系列过程。
    maven 生命周期有三类::clean,default,site。我们经常使用的是 clean(负责清理项目)和 default(负责构建项目)。
    default 生命周期包括以下 phase(阶段):

    validate
    initialize
    generate-sources
    process-sources
    generate-resources
    process-resources
    compile
    process-classes
    generate-test-sources
    process-test-sources
    generate-test-resources
    process-test-resources
    test-compile
    process-test-classes
    test
    prepare-package
    package
    pre-integration-test
    integration-test
    post-integration-test
    verify
    install
    deploy

    maven 的 default 生命周期各个 phase 绑定的插件:

    phase 插件: goal
    generate-resources plugin:descriptor
    process-resources resources:resources
    compile compiler:compile
    process-test-resources resources:testResources
    test-compile compiler:testCompile
    test surefire:test
    package jar:jar and plugin:addPluginArtifactMetadata
    install install:install
    deploy deploy:deploy

    可以通过命令查看插件的详细信息:

    mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compile-plugin –Ddetail
    
    

    官方文档:http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

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

    插件作用为定义构建逻辑,常见插件有:
    • maven-compiler-plugin(编译插件)
    • maven-resources-plugin(资源插件)
    • maven-surefire-plugin(测试插件)
    • maven-clean-plugin(清除插件)
    • maven-war-plugin(打包插件)
    • maven-dependency-plugin(依赖插件)
    • maven-scala-plugin(scala插件)
    • build-helper-maven-plugin(自定义编译插件)
    • maven-assembly-plugin(定制化打包插件)
    • maven-shade-plugin(可执行包插件)

    打jar包时排除特定目录或者文件

        <build>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <filtering>true</filtering>
                    <excludes>
                        <exclude>**</exclude>
                    </excludes>
                </resource>
            </resources>
      </build>
    

    maven-compiler-plugin

    用于编译项目源代码。
    compile 目标会编译src/main/java目录下的源代码。
    testCompile 目标会编译src/test/java目录下的测试代码。

    maven compile编译源代码。
    maven testCompile编译源代码 + 测试代码。

    配置:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.6.0</version>
        <configuration>
            <source>1.8</source> <!-- 源代码使用jdk1.8支持的特性 -->
            <target>1.8</target> <!-- 使用jvm1.8编译目标代码 -->
                   <compilerArgs> <!-- 传递参数 -->
                        <arg>-parameters</arg>
                        <arg>-Xlint:unchecked</arg>
                        <arg>-Xlint:deprecation </arg>
                  </compilerArgs>
        </configuration>
    </plugin>
    

    maven-surefire-plugin

    用于跑测试用例

    此插件可以不在 pom.xml 里面声明,maven 运行命令时,会自动调用该插件。
    一些有用的配置:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
            <skipAfterFailureCount>1</skipAfterFailureCount>  <!-- 只要有一个用例测试失败,就立即停止。默认情况下会跑完所有测试用例 -->
            <rerunFailingTestsCount>2</rerunFailingTestsCount>  <!-- 失败重试次数 -->
            <parallel>methods</parallel>  <!-- 并发执行测试用例 -->
            <threadCount>10</threadCount>  <!-- 并发执行时的线程数量 -->
        </configuration>
    </plugin>
    

    一些用法:

    // 跳过测试用例
    mvn test -Dmaven.test.skip=true
    // 或
    mvn test -DskipTests=true
    
    // 运行指定的测试用例
    mvn test -Dtest=*2Test
    mvn test -Dtest=App2Test,AppTest
    mvn test -Dtest=???2Test
    mvn test -Dtest=*Test#testAdd
    

    参考:
    http://www.cnblogs.com/qyf404/p/5013694.html

    spring-boot-maven-plugin

    spring-boot 开发必备插件。它能将 spring-boot 项目代码及其依赖 jar 打包成一个完整的可执行的 jar 包(fat jar)作用和插件maven-shade-plugin差不多。
    repackage 的 goal 绑定在生命周期的 package 阶段。
    使用方式:

    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <executions>
            <execution>
                <goals>
                    <goal>repackage</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    
    

    如果指定了 spring-boot 作为 parent,可以不指定版本和repackage goal

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.8.RELEASE</version>
        <configuration>
            <mainClass>${start-class}</mainClass>
       </configuration>
    </parent>
    
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    
    

    spring-boot 查找 main 文件的流程是:

    1.首先查看<mainClass>是否有值,如果有,直接拿标签内的类名作为入口。

    <properties>
        <start-class>com.example.Application</start-class>
    </properties>
    
    

    2.如果没找到<start-class>标签,会遍历所有文件,找到注解了@SpringBootApplication并含有 main 方法的类,将其作为入口。
    实践证明,如果没有定义<start-class>,查找入口类的方法也是非常快的。
    在实际开发中,推荐手动定义<start-class>。这样在一个项目工程中可以有多个@SpringBootApplication注解的类,修改一下 pom 里的配置就能灵活切换入口了。

    相关文章

      网友评论

        本文标题:Maven常见插件和配置

        本文链接:https://www.haomeiwen.com/subject/jidhictx.html