You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Maven同一模块中生成Shaded Jar(Uber Jar)与非Shaded Jar并发布至本地仓库?

如何在Maven构建时同时生成Shaded Jar和非Shaded Jar并发布到本地仓库

当然可以!用Maven实现同时生成普通Jar和Shaded(Uber)Jar并发布到本地仓库完全可行,我常用maven-shade-plugin来搞定这个需求,下面是具体的实现步骤和配置示例:

核心思路

Maven默认会生成一个不包含依赖的普通Jar,我们只需要通过maven-shade-plugin额外生成一个带**分类器(classifier)**的Shaded Jar,这样两个Jar会以不同的文件名共存,不会冲突,且都会被安装到本地仓库。

Pom.xml配置示例

在你的项目pom.xml中添加maven-shade-plugin的配置:

<build>
    <plugins>
        <!-- Maven默认会生成普通Jar,无需额外配置maven-jar-plugin -->
        
        <!-- 配置maven-shade-plugin生成Shaded Jar -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.4.1</version> <!-- 使用最新稳定版即可 -->
            <executions>
                <execution>
                    <phase>package</phase> <!-- 在package阶段执行shade打包 -->
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <!-- 给Shaded Jar添加分类器,避免和普通Jar重名 -->
                        <classifier>shaded</classifier>
                        <!-- 可选:指定Shaded Jar的主类,方便直接运行 -->
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.yourpackage.YourMainClass</mainClass>
                            </transformer>
                        </transformers>
                        <!-- 可选:排除不需要打包进Shaded Jar的文件,比如签名文件 -->
                        <!--
                        <filters>
                            <filter>
                                <artifact>*:*</artifact>
                                <excludes>
                                    <exclude>META-INF/*.SF</exclude>
                                    <exclude>META-INF/*.DSA</exclude>
                                    <exclude>META-INF/*.RSA</exclude>
                                </excludes>
                            </filter>
                        </filters>
                        -->
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

构建与验证

执行以下命令完成构建并发布到本地仓库:

mvn clean install

构建完成后,你会在项目的target目录下看到两个Jar文件:

  • your-artifact-id-1.0.0.jar:非Shaded的普通Jar(仅包含项目自身代码)
  • your-artifact-id-1.0.0-shaded.jar:Shaded的Uber Jar(包含项目代码+所有依赖)

同时,这两个Jar都会被安装到你的Maven本地仓库(默认路径:~/.m2/repository),其他项目可以通过指定分类器来引用对应的Jar:

  • 引用普通Jar:直接添加依赖即可,无需额外配置
  • 引用Shaded Jar:在依赖中添加<classifier>shaded</classifier>

注意事项

  • 确保maven-shade-plugin使用稳定版本,避免兼容性问题
  • 分类器可以自定义(比如用uber代替shaded),只要能和普通Jar区分开就行
  • 如果项目中还有其他打包插件(比如spring-boot-maven-plugin),要注意插件执行顺序,避免Jar文件被覆盖

内容的提问来源于stack exchange,提问作者Brandon Kalashian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 18:52:33