文章目录

Maven常见插件整理

1、maven-surefire-plugin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <skipTests>true</skipTests>
    </configuration>
</plugin>

Maven本身并不是一个单元测试框架,它只是在构建执行到特定生命周期阶段的时候,通过插件来执行JUnit或者TestNG的测试用例。这个插件就是maven-surefire-plugin,也可以称为测试运行器(Test Runner),它能兼容JUnit3、JUnit 4以及TestNG。

更多参考:maven 插件 maven-surefire-plugin)

2、lombok-maven-plugin

<plugin>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok-maven-plugin</artifactId>
</plugin>

3、maven-assembly-plugin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <!--   这个是assembly 所在位置;${basedir}是指项目的的根路径  -->
        <descriptors>
            descriptor>${basedir}/src/main/assembly/assembly.xml</descriptor>
        </descriptors>
        <!--打包解压后的目录名;${project.artifactId}是指:项目的artifactId-->
        <finalName>${project.artifactId}</finalName>
        <!-- 打包压缩包位置-->
        <outputDirectory>${project.build.directory}/release</outputDirectory>
        <!-- 打包编码 -->
        <encoding>UTF-8</encoding>
    </configuration>
    <executions>
        <execution><!-- 配置执行器 -->
            <id>make-assembly</id>
            <phase>package</phase><!-- 绑定到package生命周期阶段上 -->
            <goals>
                <goal>single</goal><!-- 只运行一次 --> 
            </goals>
        </execution>
    </executions>
</plugin>

Assembly 插件的主要作用是,允许用户将项目输出与它的依赖项、模块、站点文档、和其他文件一起组装成一个可分发的归档文件。说白了就是:结构定制化的打包。

更多参考:maven-assembly-plugin)

4、maven-war-plugin

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
            <configuration>
            <!--<attachClasses>true</attachClasses>,这样B项目内就可以使用A项目定义的class了-->
                <attachClasses>true</attachClasses>
            <!--打包的时候如果不想使用WEB-INF/classes,则在插件的配置内指定 <archiveClasses>true</archiveClasses> 
                即可,这样会把项目的java文件打包成jar放到WEB-INF/lib内-->
                <archiveClasses>true</archiveClasses>
                  <!--设置jar包名字,如果A中没有定义该名字,那么名字为classes,如下图:-->
                <classesClassifier>api</classesClassifier>
            <!--
                相同点:
                    packagingExcludes与webResources 均可以排除某些文件。
                不同点:
                    packagingExcludes针对拷贝到target后的资源进行处理。
                    webResources针对编译前的资源进行处理。
            -->
                <packagingExcludes>WEB-INF/classes/**/**</packagingExcludes>
                <webResources>
                    <resource>
                      <directory>target/${project.artifactId}/WEB-INF/classes</directory>
                      <excludes>
                          <exclude>**/**</exclude>
                      </excludes>
                    </resource>
                </webResources>
           </configuration>                
</plugin>

在项目开发中,A依赖于B,如果两个都是jar项目,那就好办,但是今天在项目中,遇到A和B都是war项目的时候,那就遇到棘手的时候了,编译会报错,错误描述可以发现,没有发现jar包,这样就需要用到Maven-war-plugin插件来把B项目生成jar包来给A依赖了,现在说说如何使用Maven-war-plugin插件

更多参考:Maven-war-plugin插件的使用

5、maven-release-plugin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.5.0</version>
    <configuration>
        <tagNameFormat>v@{project.version}</tagNameFormat>
        <autoVersionSubmodules>true</autoVersionSubmodules>
        <goals>-f pom.xml deploy</goals>
    </configuration>
</plugin>

Release插件是Apache Maven团队提供的官方插件,最终版本是2015-10-17发布的2.5.3,能够为项目代码库打tag,并将项目代码库中的代码发布到SCM的新版本

更多参考:Maven版本管理-Maven Release Plugin插件 maven release plugin插件](https://www.pianshen.com/article/88291358505/))

6、spring-boot-maven-plugin

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>2.0.4.RELEASE</version>
    <configuration>
        <fork>true</fork>
        <excludes>${basedir}/src/main/webroot</excludes>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>

springboot框架提供了一套自己的打包机制,是通过spring-boot-maven-plugin插件来实现的。

更多参考:springboot 打包插件spring-boot-maven-plugin打包机制及内部结构分析)

Maven-build之spring-boot-maven-plugin)

7、maven-source-plugin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
    <version>${maven-source-plugin.version}</version>
    <executions>
        <execution>
            <id>attach-sources</id>
            <goals>
                <goal>jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>

在很多情况下,需要对于Maven工程的源代码进行源文件的打包,可以利用source插件来完成。利用Maven的Source插件,对Maven工程的源码进行打jar包。

更多参考:maven 插件之maven-source-plugin)

8、maven-gpg-plugin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-gpg-plugin</artifactId>
    <version>${maven-gpg-plugin.version}</version>
    <configuration>
        <skip>true</skip>
    </configuration>
</plugin>

发布项目到Maven中央库。

更多参考:发布项目到Maven中央库)