我们有多模块Gradle项目,其中包含由不同模块构建的多个工件(其中一些是二进制工件)。
在模块A中,我们需要定义" Exec"在Exec Task中运行由模块B构建的二进制文件的任务,必须在配置阶段配置此二进制文件的路径。模块B将此二进制文件导出为工件(因此工件路径也在配置路径中配置)。问题是我们无法控制模块的配置顺序,因此当我们在模块A中为execTask配置二进制文件时,它会失败,因为模块B尚未配置(模块按字母顺序配置,但更改模块名称不是有效的解决方案。)
请不要问我为什么我们需要在二进制文件的项目执行阶段运行二进制文件......我们有理由......
类似于以下示例(我尝试使代码尽可能小):
moduleA
configurations {
withbinary
}
dependencies {
withbinary project(path: ':moduleB', configuration: 'binaryfile')
}
task execTask(type: Exec, dependsOn: configurations.withbinary) {
String binary = project(":moduleB").configurations.binaryfile.artifacts.toArray()[0].getFile().getAbsolutePath()
commandLine "${binary}"
args ...
}
moduleB
task binarybuildertask(...) {
...
}
configurations {
binaryfile
}
artifacts {
binaryfile file: xxxx/binaryfile, extension: 'bin', name: "binaryfile", type: 'binary', builtBy: binarybuildertask
}
我们使用Gradle 1.11& 1.12
答案 0 :(得分:1)
您实际上可以控制配置的订单项目。
evaluationDependsOn ':moduleB'