我有一个包含两个子项目的项目,并且在让installDist识别它是最新的时遇到了问题。我有一个项目build.gradle
的主projName
,其中有一个子项目subproj1
编译得很好,另一个子项目exec
具有以下任务:
task makeMyExec(type: Copy) {
dependsOn(':projName.exec:installDist')
copy {
from rootProject.file("projName/build/install/exec/")
into rootProject.file("../myExec/")
}
}
def createScript(project, mainClass, name) {
project.tasks.create(name: name, type: CreateStartScripts) {
outputDir = new File(project.buildDir, 'scripts')
mainClassName = mainClass
applicationName = name
classpath =
project.tasks[JavaPlugin.JAR_TASK_NAME].outputs.files +
project.configurations.runtime
}
project.tasks[name].dependsOn(project.jar)
project.applicationDistribution.with {
into("bin") {
from(project.tasks[name])
fileMode = 0755
}
}
}
然后在子项目exec
中,我有以下build.gradle
apply plugin: 'application'
dependencies {
compile project(':subproj1')
}
startScripts.enabled = false
run.enabled = false
createScript(project, 'projName.exec.exec1Main', 'script1')
createScript(project, 'projName.exec.exec2Main', 'script2')
createScript(project, 'projName.exec.exec3Main', 'script3')
我们的想法是,每个脚本script1
,script2
和script3
都应添加到子项目installDist
的{{1}}中,以便他们需要在复制命令运行之前创建。不幸的是,复制命令总是先运行。
这意味着如果我运行两次所有副本都正确,我会在正确的地方获得脚本,但不幸的是,如果我只运行一次。
我非常感谢帮助解决我在这里的依赖关系错误,exec
中对subproj1
的依赖,或exec
中installDist
的依赖关系任务。
有关信息 - 如果我在子项目中只有一个mainClass并且只定义
makeMyExec
然后按预期工作,所有的lib和脚本都是在复制完成之前构建的,因为依赖于installDist似乎就可以了。
答案 0 :(得分:0)
我现在找到了解决这个问题的方法。如果我将makeMyExec
任务修改为:
task makeMyExec(type: Copy) {
dependsOn('installDist','script1','script2','script3')
from rootProject.file("projName/build/install/exec/")
into rootProject.file("../myExec/")
}
这删除了该行的必要性:
project.tasks[name].dependsOn(project.jar)
并将依赖项添加到主项目的installDist的复制任务以及每个子任务script1
,script2
和script3
。
我的错误是误解project.applicationDistribution.with
实际上没有更新:projName.exec:installDist
的状态