目录
5. Maven使用maven-assembly-plugin装需要打包的文件打进zip包
1. 需求
普通java maven项目打可执行jar包,可以执行不同类里的Main函数。
2. 开发环境
jdk+maven+idea
3. Maven配置
3.1 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wy</groupId>
<artifactId>com.wy.Filenc</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
<excludes>
<exclude>jdk/annotation/bytecodeAnnotations/**.java</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<!-- 对要打的jar包进行配置 -->
<configuration>
<!-- Configuration of the archiver -->
<archive>
<!--生成的jar中,不要包含pom.xml和pom.properties这两个文件-->
<addMavenDescriptor>false</addMavenDescriptor>
<!-- Manifest specific configuration -->
<manifest>
<!--是否要把第三方jar放到manifest的classpath中-->
<addClasspath>true</addClasspath>
<!--生成的manifest中classpath的前缀,
因为要把第三方jar放到lib目录下,
所以classpath的前缀是lib/-->
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
<!--过滤掉不希望包含在jar中的文件-->
<excludes>
<!-- 排除不需要的文件夹(路径是jar包内部的路径) -->
<exclude>**/assembly/</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<!-- 对项目的组装进行配置 -->
<configuration>
<!-- 指定assembly插件的配置文件所在位置 -->
<descriptors>
<descriptor>src/main/resources/assembly/package.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<!-- 将组装绑定到maven生命周期的哪一阶段 -->
<phase>package</phase>
<goals>
<!-- 指定assembly插件的打包方式-->
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<repositories>
...
</repositories>
<dependencies>
...
</dependencies>
</project>
3.2 assembly插件配置
package.xml
<?xml version="1.0" encoding="UTF-8"?>
<assembly>
<id>full</id>
<!-- 最终打包成一个用于发布的zip文件 -->
<formats>
<format>zip</format>
</formats>
<!-- 把依赖jar包打包进Zip压缩文件的lib目录下 -->
<dependencySets>
<dependencySet>
<!--不使用项目的artifact,第三方jar不要解压,打包进zip文件的lib目录-->
<useProjectArtifact>false</useProjectArtifact>
<!-- 第三方jar打包进Zip文件的lib目录下, -->
<!-- 注意此目录要与maven-jar-plugin中classpathPrefix指定的目录相同, -->
<!-- 不然这些依赖的jar包加载到ClassPath的时候会找不到-->
<outputDirectory>lib</outputDirectory>
<!-- 第三方jar不要解压-->
<!--<unpack>false</unpack>-->
</dependencySet>
</dependencySets>
<!-- 文件设置,你想把哪些文件包含进去,或者把某些文件排除掉,都是在这里配置-->
<fileSets>
<!-- 把项目自己编译出来的可执行jar,打包进zip文件的根目录 -->
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory></outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
<!--
把项目readme说明文档,打包进zip文件根目录下
(这里针对目录document/readme.txt文件)
${projet.document.directory}是pom.xml中自己配置的
-->
<fileSet>
<directoryl>${projet.document.directory}</directoryl>
<outputDirectory></outputDirectory>
<includes>
<include>readme.*</include>
</includes>
</fileSet>
<!--
把项目相关的说明文档(除了readme文档),
打包进zip文件根目录下的document目录
(这里针对document/exclode.txt文件)
${project.document.directory}是在pom.xml中自己配置的
-->
<fileSet>
<directory>${project.document.directory}</directory>
<outputDirectory>document</outputDirectory>
<excludes>
<exclude>readme.*</exclude>
</excludes>
</fileSet>
<!--
把项目的脚本文件目录(src/main/scripts )中的启动脚本文件,
打包进zip文件的根目录
(这里针对的是src/scripts/execute/include-file.sh文件)
${project.script.execute.directory}
-->
<fileSet>
<directory>${project.script.execute.directory}</directory>
<outputDirectory></outputDirectory>
<includes>
<include>*</include>
</includes>
</fileSet>
</fileSets>
</assembly>
4. 使用maven-jar-plugin打可执行jar包
5. Maven使用maven-assembly-plugin装需要打包的文件打进zip包
7. 解压zip,执行jar包
java -cp xxx.jar xxpackage.xxClass