Gradle - 依赖替换在插件中不起作用

Gam*_*ega 2 plugins dependencies gradle build.gradle

我在使用 Gradle 插件时遇到一些问题。我试图在插件内进行依赖项替换,结果与我在文件中进行替换时的结果不同build.gradle

我有 Project1,它依赖于 Project2。AClass在 Project2 中,我有一个在 Project1 中使用的名为的类。

org.example:Project2:1.0然后我想用项目替换模块:Project2。因此,在 中build.gradle,我输入了以下代码:

task updateDependency {
    configurations.all {
        resolutionStrategy.dependencySubstitution {
            substitute module("org.example:Project2:1.0") with project(":Project2")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

效果很好。但是,如果我尝试将以下代码放入插件中:

public class UpdateDependency extends DefaultTask {

    @TaskAction
    public void executeTask() {

         project.configurations.all {
             resolutionStrategy.dependencySubstitution {
                 substitute module("org.example:Project2:1.0") with project(":Project2")
            }
        }


    }
}
Run Code Online (Sandbox Code Playgroud)

并调用与代码关联的任务,它显示错误以下错误:

/home/me/Workspace/Project1/src/Main.java: error: cannot find symbol
          new AClass()
              ^
symbol:   class AClass
location: class Main
1 error
:compileJava FAILED
Run Code Online (Sandbox Code Playgroud)

显然,由于某些原因,Project1 无法找到Project2。

我使用以下任务运行 Gradle(其中updateDependency是与依赖项替换关联的任务的名称):

gradle clean updateDependency build
Run Code Online (Sandbox Code Playgroud)

我怀疑这与 Gradle 应用代码的顺序有关,但我不知道如何修复它。

Ren*_*hke 5

依赖项替换不得存在于任务操作内。它必须提前触发。当执行任务时,通常已经来不及进行依赖替换了。您的第一个代码片段具有误导性,因为它不是在任务中执行,而是在配置阶段执行,即使它是在任务配置中完成的。