我有一个包含非Java项目的多项目Gradle构建。
我想声明一个这样的项目创建的工件,以便可以使用项目/配置依赖项来获取它们,例如
consumer:
dependencies {
myConf project(path: ':producer', configuration: 'myConf')
}
我目前所拥有的是:
producer:
configurations {
myConf
}
task produceFile {
//... somehow create the file...
outputs.file file('path/to/file')
}
artifacts.add('myConf', produceFile.outputs.files.singleFile, { builtBy produceFile })
有比我笨拙的版本更好的方法来声明工件了吗?
我想不出一种将任务依赖关系从工件传递到生产任务的方法。
答案 0 :(得分:2)
根据Legacy publishing上的文档文章和ArtifactHandler
上的javadoc,对于您的简单示例,只要任务类型扩展了{{1},就只需传递任务就足够了}(例如AbstractArchiveTask
或Zip
):
Jar
...或采用更多Gradle-ish方式:
artifacts.add('myConf', produceFile)
上面提到的文章还有另一个示例,其中将artifacts {
myConf produceFile
}
直接传递给File
方法,该方法要求您以在示例中所做的方式指定任务来构建文件。
但是,让我提出一些可能更“轻巧”的语法建议:
add
这两个示例使用artifacts {
myConf files(produceFile).singleFile { buildBy produceFile }
// or
myConf file: files(produceFile).singleFile, buildBy: [produceFile]
}
方法来解析任务的输出,而不是手动访问它们。第二个示例利用了Gradle通常提供的地图语法。
如果您想以某种方式标准化发布自定义工件的方式,我建议创建一个自定义任务类型,以提供Project.files(...)
可以作为方法或属性处理的任何不同参数:
ArtifactHandler