原文: https://howtodoinjava.com/maven/maven-shade-plugin-create-uberfat-jar-example/
在此示例中,我们将学习使用 Maven Shade 插件将 Java 项目及其依赖项打包到胖 JAR 或超级 JAR 中。
Maven Shade 插件语法
让我们先了解一下 Maven Shade 插件的基本语法,然后再学习如何在项目中使用它。
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>2.4.3</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><transformers><transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><manifestEntries><Main-Class>com.howtodoinjava.demo.App</Main-Class><Build-Number>1.0</Build-Number></manifestEntries></transformer></transformers></configuration></execution></executions></plugin>
<goal>shade</goal>告知应在程序包阶段中运行。ManifestResourceTransformer在MANIFEST.MF文件中创建条目,作为<manifestEntries>中的键值对。- 您可以根据需要使用更多可用的传输。
示例 Maven 项目
让我们创建一个示例 maven 项目,并向其中添加一些依赖项。 这是它的pom.xml文件。
<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.howtodoinjava.demo</groupId><artifactId>MavenShadeExample</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>MavenShadeExample</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.4</version></dependency></dependencies><build><finalName>MavenShadeExample-uber</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>2.4.3</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><transformers><transformerimplementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><manifestEntries><Main-Class>com.howtodoinjava.demo.App</Main-Class><Build-Number>1.0</Build-Number></manifestEntries></transformer></transformers></configuration></execution></executions></plugin></plugins></build></project>
项目结构如下所示。

Maven Shade 插件结构
运行 Maven 包目标
> mvn package
在项目的根目录中运行package目标时,您将获得两个生成的 jar 文件,即一个名为dependency-reduced-pom.xml的额外pom.xml文件。
MavenShadeExample-uber.jar:这是胖/超级 jar,其中包含所有依赖项。- 依赖项减少的
pom.xml:此生成的 Maven 文件是您的pom.xml文件减去所有依赖项。 original-MavenShadeExample-uber.jar:该 jar 是通过执行dependency-reduced-pom.xml生成的。
通过运行以下命令验证生成的所有类。
jar -tvf MavenShadeExample-uber.jar
输出将在命令提示符中列出,其中包含所有类。
清单文件的内容也可以被验证。
Manifest-Version: 1.0Build-Number: 1.0Build-Jdk: 1.6.0_33Created-By: Apache MavenMain-Class: com.howtodoinjava.demo.App
将我的问题放在评论部分。
学习愉快!
