gradle - 为什么一个项目依赖被另一个已经存在的依赖替换
问题描述
我的构建失败,因为某些依赖项没有得到满足。当我运行 gradle 依赖项任务时,我得到了一些令人惊讶的东西。完全不同的项目 project :state:api 和项目 :bus:api 没有区别对待,而是相同的。Whis 似乎是我只将总线 api 的类放到我的类路径中的原因。但为什么?我正在使用 gradle 4.7,我还在各个地方尝试了 settings.gradle 和 rootProject.name,没有任何区别。
./gradlew server:dependencies --configuration compile | grep project
+--- project :bus:api
+--- project :bus:simple-list-bus
| +--- project :bus:api
+--- project :state:api -> project :bus:api
+--- project :state:simple-state
| +--- project :state:api -> project :bus:api
+--- project :utils:common
总线/build.gradle
subprojects {
apply plugin: 'java'
apply plugin: 'maven'
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenCentral()
}
}
总线/api/build.gradle
group 'kic'
version '1.0-SNAPSHOT'
archivesBaseName = 'kic-bus-api'
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
状态/build.gradle
subprojects {
apply plugin: 'java'
apply plugin: 'maven'
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenCentral()
}
}
状态/api/build.gradle
group 'kic'
version '1.0-SNAPSHOT'
archivesBaseName = 'kic-state-api'
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
解决方案
我看起来不再尊重 settings.gradle 中的 rootProject.name 了。看起来现在只有一个(顶级根)settings.gradle 受尊重/允许。这意味着必须在最顶层的根 settings.gradle 中指定子模块名称,如下所示:
include ':bus'
include ':bus:api'
include ':bus:simple-list-bus'
include ':state'
include ':state:api'
include ':state:simple-state'
project(":state:api").name = "kic-state-api"
project(":state:simple-state").name = "kic-state-simple"
project(":bus:api").name = "kic-bus-api"
project(":bus:simple-list-bus").name = "kic-bus-simple"
推荐阅读
- java - 使用循环替换 .txt 文件或 .xml 文件中的文本
- matlab - 加快 MATLAB 中 netcdf 数据的读入
- python - Django 重定向:没有错误,但没有重定向
- jenkins - 有没有办法通过api访问Jenkins自定义环境变量?
- javascript - SyntaxError:“@react-navigation”上的意外令牌“导出”
- codeigniter - Codeigniter 3 中文文本
- python - Pandas 切片字符串:将所有字符保持到第二个句号并创建新列以保存新值
- composer-php - 如何使作曲家包全球化
- c++ - 从静态库中隐藏符号
- spring-el - Spring 表达式语言——引用变量