我必须使用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分别添加到文件夹Load
和RemoteLoad
中。但是,在运行gradle时,gradle文件找不到我要导入的build.xml。
我可以在命令中添加路径指令吗
ant.importBuild 'build.xml'
我尝试过:
ant.importBuild '../build.xml'
但它不起作用。