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