在使用 Maven 的 Jar Plugin 打包时,如果想在生成的 JAR 包中删除 pom.xml 中定义的依赖的内容,可以通配置 maven-jar-plugin 和 maven-dependency-plugin 来实现。这里的思路是明确打包时不包含依赖文件。下面介绍下 maven-jar-plugin和maven-dependency-plugin插件区别:
maven-jar-plugin 是 Maven 官方提供的一个插件,用于帮助项目生成 JAR 文件。JAR 文件(Java Archive)是一种用于分发 Java 类文件及相关资源的归档文件格式。通过该插件,开发者可以方便地控制 JAR 文件的打包内容、元数据生成,以及自定义 JAR 文件结构。maven-jar-plugin 通常用于 Java 项目的标准打包阶段,可以和 Maven 生命周期集成,也可以单独调用。
以下配置为项目生成一个简单的 JAR 文件:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
运行 mvn clean package,默认会生成 target/<artifactId>-<version>.jar。
maven-dependency-plugin 是 Maven 提供的一个强大的插件,主要用于管理和操作项目的依赖。它允许开发者在 Maven 构建生命周期中执行各种依赖相关的任务,例如分析、下载、复制、解压和清理依赖。这是一个通用插件,适用于所有 Maven 项目,尤其在处理依赖问题或自动化构建任务时非常有用。
以下命令将依赖的 JAR 文件或 ZIP 文件解压到指定目录:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.6.0</version>
<executions>
<execution>
<id>unpack-dependencies</id>
<phase>package</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0-jre</version>
<type>jar</type>
<outputDirectory>${project.build.directory}/unpacked</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
maven-dependency-plugin 是一个灵活的插件,适用于依赖的分析、复制、解压和清理等任务。通过结合 Maven 生命周期和其他插件,可以简化构建和部署过程,特别是在需要处理大量依赖的复杂项目中。
maven-shade-plugin 是 Maven 提供的一个强大的插件,专门用于创建 可运行的 JAR 文件(Fat JAR 或 Uber JAR),即将项目本身的代码和所有依赖打包到一个 JAR 文件中。它常用于需要一个独立运行的 JAR 包场景,例如 CLI 工具、独立服务或单机部署的 Java 程序。此外,maven-shade-plugin 还支持对依赖进行重定位(relocation)、合并资源文件(如 META-INF 中的配置文件),以避免类冲突和资源冲突。
基本配置
以下是一个最简单的配置示例,用于将项目及其依赖打包到一个 JAR 文件中:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.4.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
maven-shade-plugin 是一个功能丰富且灵活的插件,适合需要生成 Fat JAR 的场景。它的重定位和合并功能特别适合处理复杂依赖冲突和资源冲突问题。与其他插件相比,它更专注于生成单一 JAR 文件,是现代 Java 项目中非常常用的工具。
可以根据不同的打包方式选用上述的打包插件,如果需要屏蔽一些文件,可以使用一些关键字进行屏蔽