简述如何利用Maven打包Java项目为可执行jar ?
要利用Maven打包Java项目为可执行jar(包含所有依赖和指定的主类),你可以使用maven-assembly-plugin
或maven-shade-plugin
。这两个插件都能够将项目的编译后的class文件和它的依赖库合并到一个单独的jar文件中,但它们各自有些许差异。以下是使用这两个插件的基本步骤:
使用maven-assembly-plugin
- 修改
pom.xml
:在项目的pom.xml
文件中添加maven-assembly-plugin
配置。
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.example.MainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
- 构建项目:在命令行中运行
mvn package
,插件将自动执行,并生成一个包含所有依赖的可执行jar文件。
使用maven-shade-plugin
- 修改
pom.xml
:在项目的pom.xml
文件中添加maven-shade-plugin
配置。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version> <!-- Use the latest version -->
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.example.MainClass</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
- 构建项目:同样,在命令行中运行
mvn package
,maven-shade-plugin
将被执行,生成的可执行jar将包含所有依赖,并指定了主类。
主要区别
maven-assembly-plugin
:更加灵活,允许通过一个或多个“assembly descriptor”来定制包含在最终包中的文件和格式。maven-shade-plugin
:专门用于创建包含所有依赖的“uber-jar”,并提供了一些高级特性,如包冲突解决和类重定位。
选择哪个插件取决于你的具体需求。对于大多数简单应用,使用任何一个插件都可以满足需求,但maven-shade-plugin
在处理复杂的依赖和打包需求时可能更为强大。