原文: https://howtodoinjava.com/maven/maven-shade-plugin-create-uberfat-jar-example/

在此示例中,我们将学习使用 Maven Shade 插件将 Java 项目及其依赖项打包到胖 JAR超级 JAR 中。

Maven Shade 插件语法

让我们先了解一下 Maven Shade 插件的基本语法,然后再学习如何在项目中使用它。

  1. <plugin>
  2. <groupId>org.apache.maven.plugins</groupId>
  3. <artifactId>maven-shade-plugin</artifactId>
  4. <version>2.4.3</version>
  5. <executions>
  6. <execution>
  7. <phase>package</phase>
  8. <goals>
  9. <goal>shade</goal>
  10. </goals>
  11. <configuration>
  12. <transformers>
  13. <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
  14. <manifestEntries>
  15. <Main-Class>com.howtodoinjava.demo.App</Main-Class>
  16. <Build-Number>1.0</Build-Number>
  17. </manifestEntries>
  18. </transformer>
  19. </transformers>
  20. </configuration>
  21. </execution>
  22. </executions>
  23. </plugin>
  1. <goal>shade</goal>告知应在程序包阶段中运行。
  2. ManifestResourceTransformerMANIFEST.MF文件中创建条目,作为<manifestEntries>中的键值对。
  3. 您可以根据需要使用更多可用的传输

示例 Maven 项目

让我们创建一个示例 maven 项目,并向其中添加一些依赖项。 这是它的pom.xml文件。

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd;
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.howtodoinjava.demo</groupId>
  5. <artifactId>MavenShadeExample</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. <packaging>jar</packaging>
  8. <name>MavenShadeExample</name>
  9. <url>http://maven.apache.org</url>
  10. <properties>
  11. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  12. </properties>
  13. <dependencies>
  14. <dependency>
  15. <groupId>log4j</groupId>
  16. <artifactId>log4j</artifactId>
  17. <version>1.2.17</version>
  18. </dependency>
  19. <dependency>
  20. <groupId>org.apache.commons</groupId>
  21. <artifactId>commons-lang3</artifactId>
  22. <version>3.4</version>
  23. </dependency>
  24. </dependencies>
  25. <build>
  26. <finalName>MavenShadeExample-uber</finalName>
  27. <plugins>
  28. <plugin>
  29. <groupId>org.apache.maven.plugins</groupId>
  30. <artifactId>maven-shade-plugin</artifactId>
  31. <version>2.4.3</version>
  32. <executions>
  33. <execution>
  34. <phase>package</phase>
  35. <goals>
  36. <goal>shade</goal>
  37. </goals>
  38. <configuration>
  39. <transformers>
  40. <transformer
  41. implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
  42. <manifestEntries>
  43. <Main-Class>com.howtodoinjava.demo.App</Main-Class>
  44. <Build-Number>1.0</Build-Number>
  45. </manifestEntries>
  46. </transformer>
  47. </transformers>
  48. </configuration>
  49. </execution>
  50. </executions>
  51. </plugin>
  52. </plugins>
  53. </build>
  54. </project>

项目结构如下所示。

Maven Shade 插件 – UberJar/胖 Jar 示例 - 图1

Maven Shade 插件结构

运行 Maven 包目标

  1. > mvn package

在项目的根目录中运行package目标时,您将获得两个生成的 jar 文件,即一个名为dependency-reduced-pom.xml的额外pom.xml文件。

  1. MavenShadeExample-uber.jar:这是胖/超级 jar,其中包含所有依赖项。
  2. 依赖项减少的pom.xml:此生成的 Maven 文件是您的pom.xml文件减去所有依赖项。
  3. original-MavenShadeExample-uber.jar:该 jar 是通过执行dependency-reduced-pom.xml生成的。

通过运行以下命令验证生成的所有类。

  1. jar -tvf MavenShadeExample-uber.jar

输出将在命令提示符中列出,其中包含所有类。

清单文件的内容也可以被验证。

  1. Manifest-Version: 1.0
  2. Build-Number: 1.0
  3. Build-Jdk: 1.6.0_33
  4. Created-By: Apache Maven
  5. Main-Class: com.howtodoinjava.demo.App

将我的问题放在评论部分。

学习愉快!