Gradle子项目的installDist依赖项

时间:2018-03-06 15:14:41

标签: java gradle

我有一个包含两个子项目的项目,并且在让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')

我们的想法是,每个脚本script1script2script3都应添加到子项目installDist的{​​{1}}中,以便他们需要在复制命令运行之前创建。不幸的是,复制命令总是先运行。

这意味着如果我运行两次所有副本都正确,我会在正确的地方获得脚本,但不幸的是,如果我只运行一次。

我非常感谢帮助解决我在这里的依赖关系错误,exec中对subproj1的依赖,或execinstallDist的依赖关系任务。

有关信息 - 如果我在子项目中只有一个mainClass并且只定义

makeMyExec

然后按预期工作,所有的lib和脚本都是在复制完成之前构建的,因为依赖于installDist似乎就可以了。

1 个答案:

答案 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的复制任务以及每个子任务script1script2script3

我的错误是误解project.applicationDistribution.with实际上没有更新:projName.exec:installDist的状态