如何将Java Module的Jar包作为依赖引入Gradle多模块项目?
问题出在哪?
你手动通过IntelliJ添加Jar包的操作,只是把它丢到了项目的classpath里,但Java Module(JPMS)体系下,模块依赖必须放在module path上才行。更关键的是,Gradle作为你的构建工具,项目的依赖规则完全由它管控,IDE里手动加的Jar不会被Gradle识别为合法的模块依赖,自然会导致module-info.java里的requires语句报错。
一步步解决问题
1. 先把Jar放对地方
在gradle-module-project1的根目录下新建一个libs文件夹,把你构建好的superapi.jar复制进去。这样做是为了让Gradle能方便找到这个本地依赖,也让项目结构更整洁。
2. 让Gradle接管依赖配置
以你要在application子项目里用superapi为例,打开application/build.gradle.kts,做以下修改:
首先,添加本地仓库的配置(如果你的项目里还没加的话):
repositories { // 保留你原有的仓库,比如mavenCentral() flatDir { dirs(rootProject.file("libs")) } }
然后在依赖块里添加superapi的依赖:
dependencies { // 保留你原有的其他依赖 implementation(files(rootProject.file("libs/superapi.jar"))) // 也可以用更简洁的写法:implementation(":superapi") }
3. 同步Gradle,搞定报错
在IntelliJ里点击Gradle工具栏的「Sync Project with Gradle Files」按钮,等同步完成后,再回到application/src/main/java/module-info.java里添加:
requires com.test.modules.superapi;
这时候报错应该就消失了。
额外要注意的点
- 确认
superapi.jar是个合法的Java Module:它的module-info.java里必须明确声明了module com.test.modules.superapi { ... },而且要导出你需要用的包(比如exports com.test.superapi;),不然就算依赖上了也用不了里面的类。 - 以后别再用IDE手动加依赖了,Gradle才是项目依赖的“话事人”,所有依赖都通过Gradle配置来管理,IDE会自动同步Gradle的配置,这样就不会出现这类不一致的问题了。
内容的提问来源于stack exchange,提问作者bobbyrne01
相关产品推荐
相关产品推荐

