如何在IntelliJ中为两个依赖包生成独立Jar文件?
嘿,这个问题我之前帮好几个开发者捋清楚过——你之所以生成的两个Jar内容完全一样,核心原因是打包时没精准限定要包含的包路径,导致每次都把所有class文件一股脑打进去了。下面给你几种靠谱的实现方式,按需选就行:
方法一:使用原生
jar命令手动打包 如果只是临时需求,用JDK自带的jar命令就能快速搞定,关键是要精准指定要打包的包路径:
- 先确保你的编译后的class文件结构是标准的,比如编译输出到
target/classes目录,里面有com/example/A和com/example/B两个子目录(对应两个包) - 打包
jar_A.jar(仅包含com.example.A):在项目根目录执行以下命令,记得替换清单文件路径和class文件目录:
解释:jar cvfm jar_A.jar MANIFEST_A.MF -C target/classes com/example/A/-C参数是切换到指定的class文件目录,后面跟着的com/example/A/就是要打包的具体范围,这样只会把A包下的所有class文件打包进去 - 打包
jar_B.jar同理,只需要把路径换成com/example/B/:
小贴士:如果jar cvfm jar_B.jar MANIFEST_B.MF -C target/classes com/example/B/jar_B依赖jar_A,可以在MANIFEST_B.MF里添加Class-Path: jar_A.jar,这样运行时能自动找到依赖的Jar
方法二:用Maven分模块构建(适合长期维护的项目)
如果你的项目是用Maven管理的,拆成两个子模块是更优雅的方案,从根源上避免混包:
- 把项目改成多模块结构,在父项目的
pom.xml里声明两个子模块:<modules> <module>module-A</module> <module>module-B</module> </modules> - 子模块
module-A的代码只保留com.example.A包的内容,它的pom.xml负责打包成独立Jar;如果module-B依赖module-A,就在module-B的pom.xml里添加依赖:<dependencies> <dependency> <groupId>com.example</groupId> <artifactId>module-A</artifactId> <version>1.0.0</version> </dependency> </dependencies> - 执行
mvn clean package,每个子模块的target目录下就会生成各自独立的Jar,完全不会出现内容重复的问题
方法三:用Gradle配置多Jar任务
如果是Gradle项目,直接在build.gradle里定义两个独立的Jar任务,分别指定不同的包范围:
// 生成仅包含com.example.A的Jar tasks.register('jarA', Jar) { archiveFileName = 'jar_A.jar' from sourceSets.main.output // 指向编译后的class文件 include 'com/example/A/**' // 只包含A包的所有文件 // 自定义清单(如果需要的话) manifest { attributes 'Main-Class': 'com.example.A.Main', 'Class-Path': 'jar_B.jar' // 若有依赖可配置 } } // 生成仅包含com.example.B的Jar tasks.register('jarB', Jar) { archiveFileName = 'jar_B.jar' from sourceSets.main.output include 'com/example/B/**' manifest { attributes 'Class-Path': 'jar_A.jar' } }
执行./gradlew jarA jarB(Windows用gradlew.bat jarA jarB),就能在build/libs目录下得到两个完全独立的Jar了
额外注意点
- 打包前一定要先清理旧的编译文件(比如Maven的
mvn clean、Gradle的./gradlew clean,或者手动删除target/build目录),避免残留文件导致Jar内容重复 - 命令行打包时,千万不要直接用
jar cvf jar_A.jar target/classes/com,这样会把整个com目录打包进去,一定要精准到具体的包路径
内容的提问来源于stack exchange,提问作者greymatter
相关产品推荐
相关产品推荐

