使用场景:
在工作中使用maven管理项目时,需要将部分依赖包与开发的项目一起整合到一个jar文件中运行,其余的jar包放入axis2的lib文件夹下提供支持。maven-dependency-plugin和maven-jar-plugin不能满足需求,则需要用到maven assembly plugin这个强大的插件来分别生成。
使用说明:
在maven项目的pom文件的build节点添加如下依赖:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<!-- 指定输出的名称 -->
<finalName>smsServerMvn_V6.0.1_20171018</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<!-- 配置包内jar的xml文件路径 -->
<descriptor>src/main/assembly/assembly.xml</descriptor>
<!-- 配置包外jar的xml文件路径 -->
<descriptor>src/main/assembly/generatorLib.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-jar</id>
<phase>package</phase>
<goals>
<goal>single</goal><!-- 执行一次 -->
</goals>
</execution>
</executions>
</plugin>
创建src/main/assembly文件夹,此时项目结构如图:
在assembly.xml文件中添加如下配置:
<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>assembly-description</id>
<formats>
<format>jar</format>
</formats>
<!--压缩包下是否生成和项目名相同的根目录 -->
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${project.basedir}\target\classes\com</directory>
<outputDirectory>com</outputDirectory>
</fileSet>
<fileSet>
<directory>src/main/resources/META-INF</directory>
<outputDirectory>META-INF</outputDirectory>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<!-- 解压jar包 -->
<unpack>true</unpack>
<!-- jar包存放的路径 -->
<outputDirectory>/</outputDirectory>
<!-- 需要的jar包 -->
<includes>
<include>com.oracle:ojdbc6</include>
<include>org.apache.mina:mina-core</include>
<include>com.dareway.basic:basic-core</include>
</includes>
</dependencySet>
</dependencySets>
</assembly>
- format:压缩格式,有zip、tar、tar-gz、jar、war等。
- includeBaseDirectory:是否生成和项目名相同的根目录,默认是true,打成的jar包中会生成一个以项目名称为根的文件夹。
- fileSets:设置配置文件是否打进最终的jar包。常用的选项有文件原路径directory和输出路径outputDirectory
- dependencySets:设置依赖的jar包。unpack设置jar包是以.jar方式存进去还是以classes文件的形式存进去(与fatjar工具类似),默认为false。outputDirectory设置依赖jar包存放的路径。includes和excludes分别代表要将哪些jar包引入、将哪些jar包去除。如果没有写这两个选项,默认是将pom文件中所有的依赖生成到最终的jar文件中。可选项:scope等。
第二个assembly配置文件:(目的是将生成的jar放入外部的lib中)
<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>assembly-lib</id>
<formats>
<format>zip</format>
</formats>
<dependencySets>
<dependencySet>
<!-- jar包存放的路径 -->
<outputDirectory>lib</outputDirectory>
<!-- 不需要的jar包 -->
<excludes>
<exclude>com.oracle:ojdbc6</exclude>
<exclude>org.apache.mina:mina-core</exclude>
<exclude>com.dareway.basic:basic-core</exclude>
</excludes>
</dependencySet>
</dependencySets>
</assembly>
执行mvn命令:clean package
最终在target目录下生成了所需的jar包。
官方文档有更详细的说明:链接描述