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

Maven多模块项目依赖未打入Jar包问题咨询

问题分析与解决

你的核心误解在于:Maven的compile scope(未指定时的默认scope)仅控制依赖在编译、测试、运行阶段的可用性,但默认的maven-jar-plugin并不会自动把依赖Jar打入当前模块生成的Jar包中。默认插件只负责打包当前模块编译后的class文件与资源文件,依赖Jar仅会保留在本地仓库或项目依赖路径中,不会被嵌入到最终Jar里。

为什么依赖没被打入Jar?

  • 默认打包插件的限制:maven-jar-plugin是Maven打包Jar的默认插件,它的职责仅为打包当前模块的编译产物(src/main/java、src/main/resources下的内容),不会处理依赖的嵌入逻辑。
  • 多模块项目的依赖逻辑:如果CR_RAPDEV_BE_PRODO_DEBICLIENT_V1是你多模块项目中的另一个模块,Maven会在编译当前模块时自动关联它,但依然不会将其Jar嵌入到当前模块的Jar中——多模块项目通常是各模块独立打包,运行时通过类路径关联依赖。

如何把依赖打入Jar?

如果确实需要将依赖Jar嵌入到当前模块的Jar中,可以使用以下插件实现:

1. 使用maven-shade-plugin(推荐)

这个插件可以将依赖的class文件合并到当前Jar中,也可生成包含所有依赖的可执行Jar。在模块的pom.xml中添加配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.5.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <!-- 可选:设置主类,生成可执行Jar -->
                        <!-- <mainClass>com.your.package.MainClass</mainClass> -->
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

执行mvn clean package后,生成的Jar会包含所有依赖的class文件。

2. 使用maven-assembly-plugin

这个插件可通过自定义描述符打包包含依赖的Jar,适合更复杂的打包需求:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.6.0</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                        <!-- 可选:设置主类 -->
                        <!-- <archive>
                            <manifest>
                                <mainClass>com.your.package.MainClass</mainClass>
                            </manifest>
                        </archive> -->
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

执行打包命令后,会生成一个后缀为-jar-with-dependencies.jar的文件,包含所有依赖Jar的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 15:15:27