我正在尝试将Gradle项目从5.4更新到6.4,并且依赖替换不再起作用。
我正在使用Eclipse 4.15.0和Buildship 3.1.3。
我们有一个名为BUILD的根项目,其中包含gradle配置,然后有许多(15+)个子项目包含Java代码。 依赖项被声明为jar依赖项,如下所示:
implementation ( group: "com.company", name: "COMMON", configuration: "implementation", version: "latest.integration" )
testImplementation ( group: "com.company", name: "COMMON", configuration: "testImplementation", version: "latest.integration" )
但是如果项目签出了,我想用签出的项目自动替换jar依赖项。 为此,在根项目的settings.gradle中声明每个项目,例如:
ext.projectNames =
['COMMON', 'CLIENT', 'SERVER', 'RESTAPI' ]
projectNames.each { name ->
if (file("../"+name).exists()) {
println "project $name is a project in this build"
includeFlat name
} else {
println "project $name is a jar in this build"
}
}
每个声明的jar依赖项都应通过应用以下块来代替项目:
configurations.all {
resolutionStrategy.dependencySubstitution.all { DependencySubstitution dependency ->
if (dependency.requested instanceof ModuleComponentSelector && dependency.requested.group == "com.company") {
def targetProject = findProject(":${dependency.requested.module}")
if (targetProject != null) {
println "Using project ${targetProject} in ${project}"
dependency.useTarget targetProject
}
}
}
}
依赖替换块直接来自gradle文档(https://docs.gradle.org/current/userguide/resolution_rules.html#sub:conditional_dependency_substitution)。
如果我不应用替换,gradle会找到子项目的所有jar,并且所有内容都会编译。
我尝试将替换应用于根项目,所有项目或除根项目之外的所有项目。
所有发生的事情是jar不再被列为依赖项,但项目也没有被列为依赖项,这意味着代码不再编译。
我错过了什么,为什么依赖替换不再起作用?