Gradle复合构建疑问:WebServer项目如何引入API模块
Gradle复合构建/多项目构建配置指南(解决WebServer引用Core模块问题)
先理清两个关键概念
- 多项目构建:Core和WebServer在同一个根目录下,属于同一个父项目,适合模块间关联紧密的场景。
- 复合构建:Core和WebServer是完全独立的两个项目,通过Gradle配置关联,适合模块分属不同仓库或目录的场景。
方案1:多项目构建(如果两个模块在同一根目录)
假设你的项目结构是:
jed2k/ ├── core/ │ └── build.gradle ├── WebServer/ │ └── build.gradle └── settings.gradle
- 根目录创建settings.gradle
在jed2k根目录新建settings.gradle文件,内容如下:
rootProject.name = 'jed2k' include ':core', ':WebServer'
这行代码会告诉Gradle,当前根项目包含core和WebServer两个子模块。
- 修正WebServer依赖配置
在WebServer的build.gradle中,将依赖声明改为标准写法:
implementation(project(":core"))
- 解决Java版本兼容问题
Core用Java 11,WebServer用Java 17,必须保证Core编译出的字节码能被Java 17兼容。在Core的build.gradle中添加:
tasks.withType(JavaCompile) { options.release = 11 }
方案2:复合构建(如果两个项目独立)
如果WebServer和Core不在同一根目录,比如:
jed2k-core/ └── core/ └── build.gradle jed2k-webserver/ └── WebServer/ └── build.gradle
- 配置WebServer的settings.gradle
在WebServer项目的根目录新建或修改settings.gradle,添加对Core项目的引用:
rootProject.name = 'WebServer' includeBuild('/home/david/Documents/jed2k/core') // 替换为Core项目的实际路径
- 保持WebServer依赖配置
WebServer的build.gradle中保留:
implementation(":core")
Gradle会自动识别复合构建中的Core模块。
现有配置的优化点
- Core的build.gradle精简
java-library插件已经包含了java插件,无需重复apply plugin: 'java';如果不需要将Core打包成可执行程序,删掉apply plugin: 'application',精简后:
plugins { id 'java-library' } group = 'org.dkf.jed2k' version = '2.0' description = "jed2k core library" sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 tasks.withType(JavaCompile) { options.release = 11 } repositories { mavenCentral() // jcenter已停止服务,建议删除 } test { useJUnit() maxHeapSize = '1G' } dependencies { api group: 'org.slf4j', name: 'slf4j-jdk14', version:'1.7.33' implementation 'com.google.re2j:re2j:1.6' implementation 'com.google.code.gson:gson:2.8.8' implementation 'com.squareup.okhttp:okhttp:2.7.5' testImplementation group: 'junit', name: 'junit', version:'4.13.2' testImplementation group: 'org.mockito', name: 'mockito-core', version: '2.0.111-beta' }
- 移除过时仓库
Core的repositories里的jcenter()已经停止服务,建议删除,避免构建失败。
验证方法
- 执行WebServer项目的
gradle build命令,检查是否能成功编译。 - 在WebServer代码中尝试导入Core的类(如
import org.dkf.jed2k.xxx;),IDE如果未识别,刷新Gradle项目即可。
内容的提问来源于stack exchange,提问作者dfpmola
相关产品推荐
相关产品推荐

