用Maven构建 Fat JAR

Maven可以将你的Java项目构建成一个Fat JAR。 Fat JAR是一个单个JAR文件,其中包含项目中所有已编译的Java类以及项目所依赖的所有JAR文件。

当你需要构建可执行的JAR文件时,Fat JAR会很方便。如:微服务。你可以将你的微服务及其所有依赖项打包到一个JAR文件中。这使执行变得更加容易,因为你不必在类路径中列出微服务所依赖的所有JAR文件,这简化了启动微服务的命令。

如果你需要将应用程序打包在Docker容器中,Fat JAR也很方便。无需将应用程序依赖的每个JAR文件添加到Docker容器,只需添加应用程序的Fat JAR,并且使Dockerfile与应用程序使用的外部依赖项(JAR文件)无关。


1.Fat JAR POM配置

为了使用Maven从项目中构建Fat JAR,必须在项目的POM文件中包含Fat JAR构建配置。

通过将maven-assembly-plugin包含在POM文件的plugin部分中,可以配置Maven从项目中构建Fat JAR。

<build>

    <finalName>my-project-name</finalName>

    <plugins>



        <!-- other Maven plugins ... -->



        <plugin>

            <groupId>org.apache.maven.plugins</groupId>

            <artifactId>maven-assembly-plugin</artifactId>

            <version>3.1.1</version>



            <configuration>

                <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>


configuration XML元素内的maven-assembly-plugin包含一个descriptorRef,它告诉Maven应构建哪种类型的程序集。 jar-with-dependencies值告诉Maven构建具有依赖关系的JAR文件,这其实是Fat JAR的另一个术语。

executions XML元素告诉Maven该Maven插件应在哪个阶段和目标期间执行。 这个maven-assembly-plugin指定在打包阶段执行。


2.使用Maven命令来构建Fat JAR

构建Fat JAR的Maven命令:

mvn clean package


当使用前面显示的maven-assembly-plugin配置执行Maven package阶段时,Maven将在target目录中输出Fat JAR,Maven将其所有其他构建(例如,编译的类,生成的JavaDocs等)都输出到该目录中。 Fat JAR的命名如下:

my-project-name-jar-with-dependencies.jar


上述Fat JAR文件名中my-project-name是示例中的build XML元素中最上面finalName XML元素的值。

其它选择参考文档: http://maven.apache.org/plugins/maven-assembly-plugin/


3.完整POM文件Fat JAR配置

这是Fat JAR配置的完整Maven POM文件:

<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.jenkov.myprojectname</groupId>

    <artifactId>my-project-name</artifactId>

    <version>1.1.0</version>

    <packaging>jar</packaging>



    <name>My Project Name</name>



    <dependencies>

    

        <!-- Dependencies used by project -->



    </dependencies>



    <build>

        <finalName>my-project-name</finalName>

        <plugins>



            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-compiler-plugin</artifactId>

                <version>3.6.1</version>

                <configuration>

                    <source>1.8</source>

                    <target>1.8</target>

                </configuration>

            </plugin>



            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-assembly-plugin</artifactId>

                <version>3.1.1</version>



                <configuration>

                    <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>    






 

展开阅读全文