简述如何利用Maven打包Java项目为可执行jar ?

要利用Maven打包Java项目为可执行jar(包含所有依赖和指定的主类),你可以使用maven-assembly-pluginmaven-shade-plugin。这两个插件都能够将项目的编译后的class文件和它的依赖库合并到一个单独的jar文件中,但它们各自有些许差异。以下是使用这两个插件的基本步骤:

使用maven-assembly-plugin

  1. 修改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>
  1. 构建项目:在命令行中运行mvn package,插件将自动执行,并生成一个包含所有依赖的可执行jar文件。

使用maven-shade-plugin

  1. 修改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>
  1. 构建项目:同样,在命令行中运行mvn packagemaven-shade-plugin将被执行,生成的可执行jar将包含所有依赖,并指定了主类。

主要区别

  • maven-assembly-plugin:更加灵活,允许通过一个或多个“assembly descriptor”来定制包含在最终包中的文件和格式。
  • maven-shade-plugin:专门用于创建包含所有依赖的“uber-jar”,并提供了一些高级特性,如包冲突解决和类重定位。

选择哪个插件取决于你的具体需求。对于大多数简单应用,使用任何一个插件都可以满足需求,但maven-shade-plugin在处理复杂的依赖和打包需求时可能更为强大。

发表评论

后才能评论