9.8 KiB
title | tags | categories | keywords | date | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|
常用的Maven插件记录 |
|
|
maven,plugins,插件 | 2021-06-10 17:32:15 |
Maven是一个依赖插件执行的框架,每个任务实际上都是由插件完成的。插件通常提供的是一个目标(goal)的集合,也就是命令行格式mvn [options] [goals] [phases]
中的[goals]
。要执行一个插件的目标,可以使用命令格式mvn [plugin-name]:[goal-name]
,例如mvn jetty:run
。
在Maven中有Build和Report两种类型的插件,其中Build用于在构建时执行,Report用于在网站生成过程中执行。
每个插件可以有多个目标,插件可以使用phase
元素来定义执行时机。要执行的任务则需要绑定到插件的目标上来执行。以下给出一个示例。
<build>
<plugins>
<plugin>
<!--引入要使用的插件-->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<!--定义要执行的动作-->
<executions>
<execution>
<id>on.clean</id>
<!--激活的阶段-->
<phase>clean</phase>
<!--激活的目标-->
<goals>
<goal>run</goal>
</goals>
<configuration>
<!--绑定到目标的任务-->
<tasks>
<echo>Now in clean phase.</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
maven-compiler-plugin
Compiler插件主要用来编译项目源码。在POM中一般用来配置编译所接受的源码版本和编译后能够适应的Java运行时版本。代码版本的配置有两种方式,一种是通过配置项指定,一种是通过配置插件指定。
以下是通过配置项指定的示例。
<project>
<properties>
<!--源代码所使用的语言版本-->
<maven.compiler.source>1.8</maven.compiler.source>
<!--编译后要使用的 Java 运行时版本-->
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
或者可以直接配置插件。
<project>
<build>
<plugins>
<plugin>
<!--groupId 是 org.apache.maven.plugins 的插件,可以省略书写 groupId-->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
maven-antrun-plugin
Antrun插件用来在一些指定阶段中运行Ant任务,并且对书写在POM中的Ant任务提供支持。Antrun插件在前面一些章节已经有所接触,其具体使用格式如下。
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<phase><!--指定激活阶段--></phase>
<configuration>
<target><!--编写要执行的 Ant 任务--></target>
</configuration>
<goals>
<!-- Antrun 插件只提供了一个目标-->
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
maven-jar-plugin
Jar插件主要用来增强构建Jar包的功能,为Jar包中增加MANIFEST.MF
文件,或者通过提供MANIFEST.MF
中所需的内容来自动构建MANIFEST.MF
文件。
以下示例可以打包一个可执行的Jar包。
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.example.MainApp</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
配置好的项目可以通过命令mvn jar:jar
来完成打包。
maven-shade-plugin
Shade插件是用来建立Uber-Jar(FatJar)的。Uber-Jar将所有的依赖都包含在了Jar包中,在运行时可以不受外界运行时环境的影响。Shade插件提供了两个目标,但其中只有shade:shade
是用来打包的。
使用以下最简单的配置就可以打出一个Uber-Jar包。
<plugin>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
要创建一个可执行的Jar包,就需要指定主类,主类是在execution
元素中的configuration
元素中定义的。
<execution>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resources.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>com.example.MainApp</Main-Class>
</manifestEntries>
</transformer>
</transformers>
</configuration>
</execution>
常用的Transformer
类都定义在org.apache.maven.shade.resources
包中,主要有以下这些。
AppendingTransformer
,向资源中添加一个内容。IncludeResourcesTransformer
,向项目中添加文件。ManifestResourcesTransformer
,向MANIFEST.MF
中设定内容。XmlAppendingTransformer
,向XML资源中添加一个XML文件。
除此之外,configuration
元素中还可以使用以下子元素来实现相应的功能。
filters/filter/[includes|excludes]
,过滤Jar包中的类或者资源。artifactSet/[includes|excludes]
,指定需要打包的Jar。minimizedJar
,自动排除不使用的类。
maven-assembly-plugin
Assembly插件是用来执行定制化打包操作的。Assembly插件提供了两种打包方式,第一种是通过descriptorRefs
元素来指定使用官方统一定制的打包方式,常用的主要有bin
、jar-with-dependencies
、src
等。
官方统一定制的打包方式可以使用以下方式配置。
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
另一种定制打包方式是使用descriptors
元素来指定打包配置文件,通过配置文件来定制打包操作。这种方式的用法如下例所示。
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<descriptors>
<descriptor>src/assembly/src.xml</descriptor>
</descriptors>
</configuration>
</plugin>
打包配置文件也是一个XML文件,以下是其中可以使用的示例格式以及各个元素的含义,更详细的配置文件格式需要参考Assembly插件的文档。
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
<!--配置文件的标识-->
<id></id>
<!--输出的打包格式,可以同时指定多种-->
<!--可选格式有 zip、tar、tar.bz、jar、dir、war 等-->
<formats>
<format></format>
</formats>
<!--定制项目依赖的打包方式-->
<dependencySets>
<dependencySet>
<!--相对于根目录的包依赖目录-->
<outputDirectory></outputDirectory>
</dependencySet>
</dependencySets>
<!--指定一组文件的存放位置-->
<fileSets>
<fileSet>
<outputDirectory></outputDirectory>
<!--设定要包含的文件-->
<includes>
<include></include>
</includes>
<!--设定要排除的文件-->
<excludes>
<exclude></exclude>
</excludes>
<fileMode>0755</fileMode>
</fileSet>
</fileSets>
<!--包含指定文件到指定目录-->
<files>
<file>
<!--相对于根目录的源文件路径-->
<source></source>
<outputDirectory></outputDirectory>
<!--在指定目录中的名称-->
<destName></destName>
<fileMode></fileMode>
</file>
</files>
</assembly>
exec-maven-plugin
Exec插件主要用来支持Maven快速启动Java程序,可以在不打包为Jar文件时快捷的启动程序,而无需等待漫长的打包时间。Exec插件提供了两个目标可供使用:exec:java
和exec:exec
。其中exec:java
可以用来启动比较简单不需要复杂命令行配置的Java应用,而exec:exec
则更适合于启动需要复杂配置的应用。
以下配置了exec:java
目标来启动Java应用。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<verion>1.6.0</verion>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.example.MainApp</mainClass>
<!--命令行参数-->
<arguements>
<arguement>...</arguement>
</arguements>
<!--配置文件参数,相当于使用 -D 参数-->
<systemProperties>
<systemProperty>
<key></key>
<value></value>
</systemProperty>
</systemProperties>
</configuration>
</plugin>
使用exec:exec
目标就更加复杂,但可以更加灵活。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<verion>1.6.0</verion>
<executions>
<execution>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>java</executable>
<workingDirectory><!--工作目录--></workingDirectory>
<arguements>
<arguement><!--命令行参数--></arguement>
</arguements>
</configuration>
</plugin>