用Maven构建Fat JAR
Maven可以从Java项目构建一个Fat JAR。 Fat JAR是一个单个JAR文件,其中包含项目中所有已编译的Java类以及项目所依赖的所有JAR文件中的所有已编译Java类(请参阅Maven依赖关系)。在这个Maven Fat JAR教程中,我将向我们展示如何使用Maven创建Fat JAR。
当我们需要构建可执行的JAR文件时,胖JAR会很方便。微服务可执行文件。我们可以将微服务及其所有依赖项打包到一个JAR文件中。这使执行变得更加容易,因为我们不必在类路径中列出微服务所依赖的所有JAR文件。这简化了启动微服务的命令。
如果我们需要将应用程序打包在Docker容器中,则Fat JAR也很方便。无需将应用程序依赖的每个JAR文件添加到Docker容器,只需添加我们应用程序的Fat JAR。同样,它更短,更容易,并且使Dockerfile与应用程序使用的外部依赖项(JAR文件)无关。
Fat JAR POM配置
为了使Maven从项目中构建Fat JAR,必须在项目的POM文件中包含Fat JAR构建配置。通过将maven-assembly-plugin包含在POM文件的plugin部分中,可以配置Maven从项目中构建Fat JAR。 Maven是指将其作为程序集构建的输出产品。因此,名称为maven-assembly-plugin。这是一个来自POM文件的示例片段,显示了maven-assembly-plugin配置的一个示例:
<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>
" maven-assembly-plugin"配置内的" configuration" XML元素包含" descriptorRef",它告诉Maven该配置应构建哪种类型的程序集。值jar-with-dependencies告诉Maven构建具有依赖关系的JAR文件,这是Fat JAR的另一个术语。
" executions" XML元素告诉Maven该Maven插件应该在哪个Maven构建阶段和目标中执行。 " maven-assembly-plugin"应始终在" package"阶段执行。
Maven命令来构建Fat JAR
使Maven为项目构建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元素。
我们可以在我的《 Maven命令》教程中阅读有关Maven命令的更多信息。
我们可以在Maven官方插件文档中阅读有关Maven插件的更多信息。
带有Fat JAR配置的完整POM文件
这是带有Fat JAR配置的完整Maven POM文件,只是向我们展示了这种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.Hyman.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>

