目录
说明
本文是对 maven-assembly-plugin
常用配置的介绍,更详细的学习请参照官网文档地址:Apache Maven Assembly Plugin
maven-assembly-plugin
作用:用于将 Maven 项目打包成可执行的程序或分发包,将项目中的代码、资源和所有依赖包的内容打成一个程序集
1.项目配置
1.1 创建assembly.xml文件
<assembly>
<id>assembly</id>
<formats>
<format>zip</format>
<format>jar</format>
<format>tar.gz</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<!-- -->
<fileSet>
<directory>src/main/resources</directory>
<outputDirectory>conf</outputDirectory>
<includes>
<include>*.xml</include>
<include>*.properties</include>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<fileMode>0644</fileMode>
</fileSet>
<fileSet>
<directory>assembly/bin</directory>
<outputDirectory>bin</outputDirectory>
<fileMode>0755</fileMode>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
2. 在项目的 pom.xml 文件中添加以下配置
2.1 使用assembly.xml打包成对应格式包体
<build>
<plugins>
<!--主要用于将 Maven 项目打包成可执行的程序或分发包 -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<id>make-assembly</id><!--名字任意 -->
<phase>package</phase><!-- 绑定到package生命周期阶段上 -->
<goals>
<goal>single</goal><!-- 只运行一次 -->
</goals>
<configuration>
<appendAssemblyId>true</appendAssemblyId><!-- 设为 FALSE, 防止包名加入 assembly.xml 中的 id -->
<attach>false</attach><!--指定是否将 Java 源代码附加到项目的构件列表中-->
<descriptors>
<descriptor>${project.basedir}/src/main/resources/assembly/assembly.xml</descriptor>
</descriptors>
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<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>
abc-test-0.0.1-SNAPSHOT.jar:当前项目单独jar(不包含外部资源)
abc-test-0.0.1-SNAPSHOT-assembly.jar:所有资源,项目jar和依赖jar都放在lib下
abc-test-0.0.1-SNAPSHOT-assembly.zip:项目所有资源打包成zip(雷同上面的jar)
2.2 使用assembly插件打包一个内库的jar文件
<build>
<plugins>
<!--主要用于将 Maven 项目打包成可执行的程序或分发包 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<descriptorRefs>
<!--预定义的描述符格式-->
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id><!--名字任意 -->
<phase>package</phase><!-- 绑定到package生命周期阶段上 -->
<goals>
<goal>single</goal><!-- 只运行一次 -->
</goals>
</execution>
</executions>
</plugin>
<plugin>
<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>
abc-test-0.0.1-SNAPSHOT.jar:当前项目单独jar(不包含外部资源)
abc-test-0.0.1-SNAPSHOT-jar-with-dependencies.jar:包含所有依赖class文件,将所有资源重新打包在一起
2.3 使用assembly插件打包一个可执行的jar文件
<build>
<plugins>
<!--主要用于将 Maven 项目打包成可执行的程序或分发包 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<id>make-assembly2</id><!--名字任意 -->
<phase>package</phase><!-- 绑定到package生命周期阶段上 -->
<goals>
<goal>single</goal><!-- 只运行一次 -->
</goals>
<configuration>
<archive>
<manifest>
<mainClass>com.example.abctest.TestController</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<useUniqueVersions>false</useUniqueVersions>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<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>
abc-test-0.0.1-SNAPSHOT.jar:当前项目单独jar(不包含外部资源)
abc-test-0.0.1-SNAPSHOT-jar-with-dependencies.jar:包含所有依赖class文件,将所有资源重新打包在一起
3. 总结
官方解释:An "assembly" is a group of files, directories, and dependencies that are assembled into an archive format and distributed.
翻译:“程序集”是一组文件、目录和依赖项,这些文件、目录和依赖项被组合成一种归档格式并进行分发
使用assembly.xml更加偏向于打包所以项目资源,例如可以将sql,jdbc等 脚本文件一起打包,方便项目的分发,但是无法将项目jar包打包成可执行的jar;如果需要将jar打包为可执行jar,可以使用2.3小节配置打包;其他打包方式可见maven打包插件——maven-jar-plugin