这似乎是一件非常简单的事情,但我尝试了无数的在网上找到的例子,它们都以某种不同的方式失败,这意味着我可能只是没有得到任务如何在gradle中工作的概念(对不起,这对我来说还是一个新手。)
我想要做的是:我有一个多项目gradle解决方案,它有几个java子项目。对于每个子项目,我想创建一个任务:
这是我得到的(它可能只是遗漏了一些小东西,或者它可能是一种完全错误的方法,我希望有人会向我解释):在我的根build.gradle
我'我说这个:
subprojects{
plugins.withType(JavaPlugin){ //create copyOutput task for all java projects
tasks.create("copyOutput"){
Path infile = Paths.get(buildDir.getCanonicalPath() + "/libs/" + project.name + ".jar")
Path outfile = Paths.get(rootProject.projectDir.getCanonicalPath() + "/bin/" + project.name + ".jar")
Files.copy(infile, outfile, REPLACE_EXISTING)
}
tasks['copyOutput'].dependsOn tasks['build'] //only run after build (doesn't work, runs immediately at configuration time)
}
}
我可以通过堆栈跟踪收集到的问题是,它在配置时执行立即任务,每个时间(不仅仅是我做gradle copyOutput
,但总是,即使我做gradle clean
之类的事情。)
显然,我并不了解任务创建和依赖的工作方式。任何人都可以澄清吗?
答案 0 :(得分:2)
您需要添加操作(<<
):
subprojects{
plugins.withType(JavaPlugin){ //create copyOutput task for all java projects
tasks.create("copyOutput") << {
Path infile = Paths.get(buildDir.getCanonicalPath() + "/libs/" + project.name + ".jar")
Path outfile = Paths.get(rootProject.projectDir.getCanonicalPath() + "/bin/" + project.name + ".jar")
Files.copy(infile, outfile, REPLACE_EXISTING)
}
tasks['copyOutput'].dependsOn tasks['build'] //only run after build (doesn't work, runs immediately at configuration time)
}
}