在使用 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 項目中非常常用的工具。
可以根據不同的打包方式選用上述的打包插件,如果需要屏蔽一些文件,可以使用一些關鍵字進行屏蔽