如何让导入的Jar包依赖项目已有依赖而非自身携带依赖
解决自定义Jar包仅保留自身代码的问题
我来帮你搞定这个问题!你遇到的核心问题是打包时不小心把项目B的依赖也一并打包进去了,但你只需要保留自己修改后的业务代码(也就是com目录)就行,下面给你两种实用的解决办法:
方法1:用Gradle原生Jar任务生成纯净Jar包
其实Gradle默认的jar任务只会打包你项目B自己编译后的class文件,不会包含任何依赖,完全符合你的需求。操作步骤很简单:
- 打开IntelliJ右侧的Gradle面板,找到项目B的目标模块
- 展开
Tasks > build,双击执行jar任务 - 生成的Jar包会在
模块目录/build/libs/路径下,这个Jar里就只有你的com目录内容,没有多余依赖
如果需要自定义Jar的名称或者输出配置,可以在项目B的build.gradle(Groovy)里添加以下配置:
jar { // 自定义Jar文件名,比如改成你想要的名字 archiveFileName = "my-modified-b.jar" // 明确指定只打包项目自身的编译产物(默认就是如此,加上更保险) from sourceSets.main.output }
要是用的是Kotlin DSL(build.gradle.kts),配置如下:
tasks.jar { archiveFileName.set("my-modified-b.jar") from(sourceSets.main.get().output) }
方法2:调整IntelliJ Artifact配置,排除依赖
如果你习惯用IntelliJ的Build Artifacts功能,只需要调整一下Artifact的输出配置,去掉依赖项即可:
- 打开
File > Project Structure > Artifacts - 找到你之前创建的Artifact,点击右侧的编辑按钮
- 在
Output Layout面板里,移除所有来自Available Elements的依赖模块/库,只保留项目B模块的Compile output - 点击
Apply和OK,重新执行Build Artifact,生成的Jar就只会包含你的com目录了
额外注意点
因为项目A已经包含了项目B需要的大部分依赖,所以你生成的Jar完全不需要打包这些依赖——只要Jar里只有你的业务代码,导入项目A后会自动复用项目A已有的依赖,不会出现冲突或冗余。
内容的提问来源于stack exchange,提问作者Slaknation
相关产品推荐
相关产品推荐

