下面是详细的“Maven 项目用 Assembly 打包可执行 jar 包的方法”的攻略:
一、前提条件
- 已安装 Maven 并配置环境变量
- 已经有一个 Maven 项目
二、添加 Assembly 插件到 Maven 项目中
在项目的 pom.xml 文件中添加以下插件配置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<archive>
<manifest>
<mainClass>your.main.Class</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
其中 <mainClass>your.main.Class</mainClass>
指定了可执行 jar 包的入口类。
三、在 Maven 项目中创建 assembly 描述文件
创建一个名为 assembly.xml 的文件,放置在 Maven 项目的根目录中。以下是一个示例:
<assembly>
<id>jar-with-dependencies</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
<scope>runtime</scope>
<unpack>false</unpack>
</dependencySet>
</dependencySets>
</assembly>
上述配置中,outputDirectory 指定了依赖库的输出目录,scope 为 runtime 表示只打包运行时依赖。
四、执行 Maven 命令
在 Maven 项目的根目录执行以下命令即可生成可执行 jar 包:
mvn clean package assembly:single
执行完命令之后,在项目的 target 目录下会生成一个包含所有依赖项的可执行 jar 包。
五、示例说明
以下是两个示例说明:
示例一
假设我们有一个 Maven 项目,其中有一个入口类 com.example.Main
,这个项目依赖了 junit 和 log4j,下面分别介绍 pom.xml 和 assembly.xml 的配置:
pom.xml 配置:
<project>
<!-- ... -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
<!-- ... -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
assembly.xml 配置:
<assembly>
<id>jar-with-dependencies</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
<scope>runtime</scope>
<unpack>false</unpack>
</dependencySet>
</dependencySets>
</assembly>
使用以下命令执行 Maven 构建:
mvn clean package assembly:single
执行完命令之后,在项目的 target 目录下会生成一个包含所有依赖项的可执行 jar 包 project-1.0-SNAPSHOT-jar-with-dependencies.jar
。
示例二
假设我们有一个 Maven 项目,其中有一个入口类 com.example.Main
,这个项目依赖了 commons-lang3 和 gson,下面分别介绍 pom.xml 和 assembly.xml 的配置:
pom.xml 配置:
<project>
<!-- ... -->
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
</dependencies>
<!-- ... -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
assembly.xml 配置:
<assembly>
<id>jar-with-dependencies</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
<useProjectArtifact>false</useProjectArtifact>
<unpack>true</unpack>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
</assembly>
使用以下命令执行 Maven 构建:
mvn clean package assembly:single
执行完命令之后,在项目的 target 目录下会生成一个包含所有依赖项的可执行 jar 包 project-1.0-SNAPSHOT-jar-with-dependencies.jar
。
注意:在 assembly.xml 中使用了 <useProjectArtifact>false</useProjectArtifact>
和 <unpack>true</unpack>
配置,表示依赖不直接从 Maven 仓库中下载,而是拷贝到 jar 包中并解压缩。这个配置的好处是,可以避免版本冲突问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Maven 项目用Assembly打包可执行jar包的方法 - Python技术站