Maven常用插件的使用Case

Maven是Java工程常用的项目管理工具,通过Maven可以管理项目的各个生命周期。Maven本质是一个插件框架,本身并不执行任何构建任务,所有的工作都是交给插件来完成的。熟练使用Maven插件,可以让我们的开发工作事半功倍,下面列出的都是我平时工作中常用插件的使用case,不会涵盖所有配置,但已使我现在的工作足够流畅。

一、maven-compiler-plugin

maven-compiler-plugin的compiler目标(goal)与编译生命周期阶段绑定。需要指定编译的jdk版本和编码,如:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version>
    <configuration>
        <target>${jdk.version}</target>
        <source>${jdk.version}</source>
        <encoding>${project.build.sourceEncoding}</encoding>
    </configuration>
</plugin>

二、maven-surefire-plugin

maven-surefire-plugin是用于测试的插件,对应的mvn命令是mvn test,执行这个命令将把test目录下的所有测试用例都跑一遍。如果只需要执行其中的一个测试类,使用mvn test -Dtest=测试类。2.7.3版本以上还支持执行单独的一个测试方法,命令行mvn test -Dtest=测试类#测试方法。大部分情况下,只要知晓上面的命令就已足够使用,不需要显示配置该插件,但是当需要忽略测试,指定某些测试用例,或者并行执行的时候,了解该插件的一些配置项就有必要了,如:

<!--Maven运行测试用例时,是通过调用maven的surefire插件并fork一个子进程来执行用例的。-->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <!--2.7.3版本以上才可以指定执行单个测试方法-->
    <!--mvn clean test -Dtest=AppTest#dTest-->
    <version>2.18.1</version>
    <configuration>
        <!--忽略不执行测试-->
        <skipTests>true</skipTests>
        <!--指定要执行的测试用例-->
        <includes>
            <include>**/OtherTest.java</include>
        </includes>
        <!--forkmode属性中指明是要为每个测试创建一个进程,还是所有测试在同一个进程中完成。-->
        <!--pretest:每一个测试创建一个新进程-->
        <!--once:在一个进程中进行所有测试-->
        <!--always:在一个进程中并行的运行脚本-->
        <forkMode>always</forkMode>
        <!--threadCount:执行时,指定可分配的线程数量-->
        <parallel>methods</parallel>
        <threadCount>2</threadCount>
        <!--jvm参数 mvn clean test -Djava.io.tmpdir=logs-->
        <argLine>-Djava.io.tmpdir=logs</argLine>
    </configuration>
</plugin>

三、exec-maven-plugin

java命令去执行应用程序最麻烦的就是classpath了,有了exec-maven-plugin这个插件,用mvn exec:exec命令去执行,就需要我们为classpath费脑筋了。执行前要先编译。

<plugin>
    <!--mvn clean compile;mvn exec:exec-->
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2.1</version>
    <configuration>
        <!-- 执行什么样的命令 -->
        <executable>java</executable>
        <arguments>
            <argument>-Djava.io.tmpdir=logs</argument>
            <!-- 工程的classpath并不需要手动指定,它将由exec自动计算得出 -->
            <argument>-classpath</argument>
            <classpath/>
            <argument>${main.class}</argument>
            <argument>arg1</argument>
            <argument>arg2</argument>
        </arguments>
    </configuration>
</plugin>

四、maven-dependency-plugin

maven-dependency-plugin的作用是分析导入项目依赖,mvn dependency:tree,mvn dependency:analyze是分析依赖冲突的有效工具。copy-dependencies目标能将依赖的jar包从本地仓库中复制到特定目录下,这在项目打包时非常有用。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>copy</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>
                    <!--拷贝到构建目录的lib文件夹下-->
                    ${project.build.directory}/lib
                </outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

五、maven-resources-plugin

maven-resources-plugin插件的copy-resources目标能实现工程资源文件的拷贝,如:

<plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <executions>
        <execution>
            <id>copy-resources</id>
            <phase>package</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <encoding>UTF-8</encoding>
                <!--拷贝到构建目录conf文件夹下-->
                <outputDirectory>${project.build.directory}/conf</outputDirectory>
                <resources>
                    <resource>
                        <directory>src/main/resources/conf</directory>
                        <includes>
                            <include>config.properties</include>
                        </includes>
                        <filtering>true</filtering>
                    </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
</plugin>

六、maven-jar-plugin

这个插件提供了构建jar包的能力。配合前面介绍的maven-dependency-plugin和maven-resources-plugin,用下面这段配置我们可以构建一个配置文件在jar包外方便修改,指定了main class和classpath的工程jar包,基本可以拿来部署运行了。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.5</version>
    <configuration>
        <archive>
            <!--自动添加META-INF/MANIFEST.MF-->
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
                <mainClass>${main.class}</mainClass>
            </manifest>
            <manifestEntries>
                <Class-Path>.</Class-Path>
            </manifestEntries>
        </archive>
        <!--排除某些配置文件,放在jar的外面,方面修改-->
        <excludes>
            <exclude>**/conf/*.properties</exclude>
        </excludes>
    </configuration>
</plugin>

七、maven-shade-plugin

如果依赖的项目比较少,可以选择把这些依赖都打进一个jar包里。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <filters>
                    <filter>
                        <artifact>ocm.mogujie.union.maven:demo</artifact>
                        <excludes>
                            <exclude>**/conf/*.properties</exclude>
                        </excludes>
                    </filter>
                </filters>
                <transformers>
                    <!--如果使用了spring,注意将spring各个版本的schemas都打进jar包中-->
                    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/spring.handlers</resource>
                    </transformer>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/spring.schemas</resource>
                    </transformer>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>${main.class}</mainClass>
                        <manifestEntries>
                            <Class-Path>.</Class-Path>
                        </manifestEntries>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

八、maven-assembly-plugin

如果是比较大型的应用,所有依赖都和项目代码打包成一个jar就显得不太合适了。maven-assembly-plugin用户制作项目分发包,包中可以包含项目的可执行jar,依赖,README,shell脚本等,依据自定义编写的描述文件,能够在文件夹,文件模式,模块级别控制打包,支持主要的包格式:zip、tar.gz、war、jar。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.5</version>
    <configuration>
        <archive>
            <!--自动添加META-INF/MANIFEST.MF-->
            <manifest>
                <addClasspath>true</addClasspath>
                <mainClass>${main.class}</mainClass>
            </manifest>
            <manifestEntries>
                <Class-Path>..</Class-Path>
            </manifestEntries>
        </archive>
        <!--排除某些配置文件,放在jar的外面,方面修改-->
        <excludes>
            <exclude>**/conf/*.properties</exclude>
        </excludes>
    </configuration>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2.1</version>
    <executions>
        <execution>
            <id>assemble</id>
            <goals>
                <goal>single</goal>
            </goals>
            <phase>package</phase>
        </execution>
    </executions>
    <configuration>
        <descriptors>
            <descriptor>${project.basedir}/src/main/assembly/release.xml</descriptor>
        </descriptors>
        <finalName>${project.artifactId}-${project.version}</finalName>
        <outputDirectory>${project.build.directory}</outputDirectory>
    </configuration>
</plugin>

打包描述文件release.xml:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0
          http://maven.apache.org/xsd/assembly-1.1.0.xsd">
    <id>dist</id>
    <formats>
        <format>tar.gz</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <directory>.</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>README*</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>src/main/assembly</directory>
            <outputDirectory>logs</outputDirectory>
            <excludes>
                <exclude>*</exclude>
            </excludes>
        </fileSet>
        <fileSet>
            <directory>./src/main/bin</directory>
            <outputDirectory>bin</outputDirectory>
            <includes>
                <include>**/*</include>
            </includes>
            <fileMode>0755</fileMode>
        </fileSet>
        <fileSet>
            <directory>src/main/resources/conf</directory>
            <outputDirectory>conf</outputDirectory>
            <includes>
                <include>config.properties</include>
            </includes>
        </fileSet>
    </fileSets>
    <dependencySets>
        <dependencySet>
            <outputDirectory>lib</outputDirectory>
        </dependencySet>
    </dependencySets>
</assembly>

运行脚本start.sh

#!/bin/bash
java -jar ../lib/demo-1.0-SNAPSHOT.jar

时间: 2024-12-24 20:29:22

Maven常用插件的使用Case的相关文章

Maven常用插件配置和使用

主要介绍Maven的几个常见第三方插件(cobertura.findbugs.source.assembly.插件开发)配置和使用,接Maven介绍 maven本质上是一个插件框架,它的所有工作都交给插件来做,每个插件可以有多个goal.除了自带的插件之外还有很多比较成熟的第三方插件,我们也很容易上手进行简单的插件开发,下面一一介绍 1 自带插件maven自带的核心插件为Build plugins和Reporting plugins.mvn compile编译源码实际上就利用到了maven-co

maven常用插件pom配置

一.问题描述: 部署一个maven打包项目时,jar包,依赖lib包全部手动上传至服务器,然后用maven部署报错:Exception in thread "main" java.lang.NoClassDefFoundError:,当时心想可能是依赖的lib包有问题,各种重新部署(以为是依赖的包没有更新),确忽略了一个大问题:pom.xml没仔细检查.解决方法:最终发现<plugin>                <groupId>org.apache.ma

Maven常用插件--转

=========Maven Report Plugin========= 1.源码分析 Java代码   <artifactId>maven-pmd-plugin</artifactId> 2.代码格式检查 Java代码   <artifactId>maven-checkstyle-plugin</artifactId> 3.代码相似度检查 Java代码   <groupId>org.codehaus.mojo</groupId>

maven常用插件配置详解

常用插件配置详解Java代码    <!-- 全局属性配置 --> <properties> <project.build.name>tools</project.build.name> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> project.build.name:  用来定义war包名称  proje

MAVEN学习(六)--maven常用插件

我们使用maven做一些日常的工作开发的时候,无非是想利用这个工具带来的一些便利.比如它带来的依赖管理,方便我们打包和部署运行.这里几个常见的插件就是和这些工程中常用的步骤相关. maven-compile-plugin 这个插件就如同名字所显示的这样,用来编译源代码的.最开始碰到这个插件是在于有的时候我们下载了一些工程需要编译的时候,比如我们输入命令:mvn install ,但是系统编译的时候报错了,错误的信息如下: [ERROR] Failed to execute goal org.ap

maven常用插件

有用插件: Maven Release Plugin 版本发布; cargo-maven2-plugin 自动化部署; jetty-maven-plugin web测试; maven-gpg-plugin, GPG:http://www.gnupg.org/download/ 给maven构件加密        hkp://pgp.mit.edu 美国麻省理工大学公钥服务器 maven-surefire-plugin: 单元测试,集成测试 maven-site-plugin:生成站点 //mvn

【转】maven常用插件介绍

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

maven 常用插件总结

maven-javadoc-plugin (1) 说明:该插件生成项目的javadoc.对于构建jar目标,javadoc会首先生成并打包放入jar文件中. (2) 默认用法: pom.xml配置 <project> ... <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plu

maven常用插件整理

1. 依赖管理插件:maven-dependency-plugin, 详见: https://maven.apache.org/plugins/maven-dependency-plugin/通过该插件可以对被依赖组件进行复制,解压等一系列操作,特别是在多模块化项目中配置Spring自动扫描时该插件非常有用.配置示例: 1 <build> 2 <plugins> 3 <!-- 将依赖模块的jar包文件提取出来放到指定位置 --> 4 <plugin> 5 &