Gradle依赖性并不像我期望的那样起作用

Gradle依赖性并不像我期望的那样起作用,gradle,dependencies,Gradle,Dependencies,我有两个子项目子项目1和子项目2。我想将subproject2中的一些类添加到subproject1中,并获取subproject1.jar。下面是我的gradle文件: task copyClasses (dependsOn: [ ':subproject1:clean', ':subproject1:classes']) { println "copyClasses " doLast { Task study = tasks.getByPath(':sub

我有两个子项目子项目1和子项目2。我想将subproject2中的一些类添加到subproject1中,并获取subproject1.jar。下面是我的gradle文件:

task copyClasses (dependsOn: [  ':subproject1:clean',  ':subproject1:classes']) {
    println "copyClasses "
    doLast {
        Task study = tasks.getByPath(':subproject1:jar')
        study.doFirst {
            copy {
                println "copy ... "
                println sourceSets.main.output.classesDir
                println project(':subproject1').sourceSets.main.output.classesDir
                from sourceSets.main.output.classesDir
                into project(':subproject1').sourceSets.main.output.classesDir
            }
        }
    }
}

task jarUpdated (dependsOn: [ clean, classes, copyClasses, ':subproject1:jar']) {
    doLast {
        println "jarUpdated"
    }
}
但我得到的构建顺序如下:

$ gradle jarUpdated
copyClasses
:subproject1:compileJava
:subproject1:processResources UP-TO-DATE
:subproject1:classes
:subproject1:jar
:subproject2:compileJava
:subproject2:processResources UP-TO-DATE
:subproject2:classes
:subproject2:clean
:subproject1:clean
:subproject2:copyClasses
Calling Task.doFirst(Closure) after task execution has started has been deprecated and is scheduled to be removed in Gradle 2.0. Check the configuration of task ':subproject1:jar'.
:subproject2:jarUpdated
jarUpdated

BUILD SUCCESSFUL
我的期望是:

$ gradle jarUpdated
:subproject2:clean 
:subproject2:compileJava
:subproject2:processResources UP-TO-DATE
:subproject2:classes
:subproject1:clean 
:subproject1:compileJava
:subproject1:processResources UP-TO-DATE
:subproject2:copyClasses
copyClasses
copy ... 
:subproject1:jar 
:subproject2:jarUpdated
jarUpdated

BUILD SUCCESSFUL
请你建议或指出我遗漏了什么?非常感谢

准确完成您要求的任务的“最简单”方法可能是子项目1构建文件中的类似内容

jar {
  from  tasks.getByPath(':subproject2:compileJava')
}
然而,这是一个非常简单的方法,有很多警告,例如

  • 子项目1无法针对子项目2类进行编译
  • 不包括子项目2的任何依赖项

实际上,我建议将subproject2声明为subproject1的依赖项,并使用Peter建议的一个插件。

构建脚本有许多问题。我建议使用诸如或之类的插件创建胖罐子。@PeterNiederwieser感谢您的评论。实际上,我想扩展subproject1的jar,以便从subproject2添加一些类。所以我改变了任务(':subproject1:jar')。这并不能解决问题。任务无法创建/执行其他任务。
dependsOn
之后的任务顺序不显著
println“copyClasses”
需要进入
doLast
内部。而且项目不应该延伸到其他项目的项目模型中(
project(':subproject1')。sourceset
)。解决这些问题最简单的方法是使用我提到的一个插件。我认为dependsOn之后的任务应该按顺序执行。这在Ant中是正确的,但在Gradle中不是。