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