如何在非Java版本中声明项目工件?

时间:2018-08-16 17:04:40

标签: gradle

我有一个包含非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 })

有比我笨拙的版本更好的方法来声明工件了吗?

我想不出一种将任务依赖关系从工件传递到生产任务的方法。

1 个答案:

答案 0 :(得分:2)

根据Legacy publishing上的文档文章和ArtifactHandler上的javadoc,对于您的简单示例,只要任务类型扩展了{{1},就只需传递任务就足够了}(例如AbstractArchiveTaskZip):

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