从不同的gradle文件调用任务

时间:2018-10-15 20:25:53

标签: java gradle

我必须使用Gradle从1个项目创建2个工件。我有3个gradle文件,一个父文件,每个工件的build.gradle和proj1.gradle和proj2.gradle。 我想从父构建文件调用项目特定的任务。 这是我的settings.gradle文件,用于定义项目并将gradle文件与每个项目相关联:

rootProject.name = 'Parent'
include 'proj1' 
include 'proj2'

project(':proj1').buildFileName = 'buildProj1.gradle'
project(':proj2').buildFileName = 'buildProj2.gradle'

这是用于调用特定任务的build.gradle文件:

project(':Parent') {

    dependencies {
         project(':proj1')
         project(':proj2')
    }
}

task compileAll (dependsOn: [':proj1:compileProj1']){
    compileAll.finalizedBy ':proj2:compileProj2'
 }

错误是它找到了compileProj1任务。

如何从父构建文件中调用子项目任务?

更新

根据以下建议,我将尽量简洁地解释我需要做的事情。
我有一个旧的ANT项目,它是一个庞大的Ant项目的一部分。它现在是独立的,需要转换为Gradle项目。这个1项目使用一组构建脚本创建2个Ear文件。一个耳朵文件是另一个文件的子集。作为Ant构建,要正确创建这些ear文件,请执行以下步骤: 1. BuildScript1运行任务:清除所有内容,下载依赖项,编译并分段 2. BuildScript2运行任务:干净编译,编译并分段 3. BuildScript1运行任务:包 4. BuildScript2运行任务:包

这些任务有很多被调用的相关任务和宏。因此,计划是将每个ear文件的构建脚本导入其自己的gradle文件中,并在上述任务的父gradle文件中创建依赖关系图。

这些是在First Ear文件中定义的gradle任务:

task ear1Clean(dependsOn: ['clean-all', copyDependencies])

task ear1Compile(dependsOn: ['compile-and-stage'])
    ear1Compile.finalizedBy 'deploy'

以下是为Second Ear文件定义的gradle任务:

task ear2Compile(dependsOn: ['clean-compile'])
    ear2Compile.finalizedBy 'compile-and-stage'     

//Package the Load ear
task ear2Package(dependsOn: ['deploy'])

在父gradle文件build.gradle中,我想执行以下操作:

task compileAll (dependsOn: [':proj1:ear1Compile']){
    compileAll.finalizedBy ':proj2:ear2Compile'
 }

希望这可以清除一切...

更新

这是我到目前为止所拥有的... Settings.gradle文件:

include 'loadRemote', 'load'
rootProject.name = 'EquipLoad'

project(':loadRemote').buildFileName = 'buildRemote.gradle'
project(':load').buildFileName = 'buildLoad.gradle'

父文件:build.gradle

allprojects {
    task cleanCompileStage {
        doLast { task ->
            println "Clean, compile, stage $task.project.name"
        }
    }
}

tasks.getByPath(":load:cleanCompileStage").dependsOn(":loadRemote:cleanCompileStage")

在每个load和loadRemote gradle文件中定义了cleanCompileStage个任务。 当我使用以下命令运行它时:gradle -q cleanCompileStage 我没有收到错误,并且打印出来了:

Clean, compile, stage EquipLoad
Clean, compile, stage loadRemote
Clean, compile, stage load

但是,它正在调用项目gradle文件中的任务。我在项目特定任务中放入了println语句,但它们没有被调用。

remoteLoad.gradle和load.gradle正在访问相同的项目代码。他们在gradle文件中导入不同的ant构建文件以区别构建。 gradle文件的文件结构如下:

|--build.gradle
|--remoteLoad.gradle
|--load.gradle

更新 将load.gradle和remoteLoad.gradle分别添加到文件夹LoadRemoteLoad中。但是,在运行gradle时,gradle文件找不到我要导入的build.xml。 我可以在命令中添加路径指令吗 ant.importBuild 'build.xml'

我尝试过: ant.importBuild '../build.xml' 但它不起作用。

0 个答案:

没有答案