[英]Gradle subproject installDist dependency
我有一个包含两个子项目的项目,并且在使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
应该添加到子项目exec
的installDist
中,以便需要在复制命令运行之前创建它们。 不幸的是,复制命令总是首先运行。
这意味着如果我运行两次,则所有副本都将正确复制,并且将脚本放置在正确的位置,但是不幸的是,如果只运行一次,则不是。
我非常感谢您提供帮助,以解决我在此处的依赖项存在的问题,无论是exec
对subproj1
的依赖,还是makeMyExec
任务中installDist
的依赖。
有关信息-如果我在子项目中只有一个mainClass并且仅定义
mainClassName ='projName.exec.exec1Main'
applicationName = 'script1'
然后这将按预期工作,并且所有lib和脚本都在复制完成之前构建,因为那时对installDist的依赖似乎可以工作。
我现在找到了解决该问题的方法。 如果我将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
的状态
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.