如何使子项目复制同级子项目生成的文件?所有这些都具有适当的依赖性管理,并且不假定使用任何特定于语言的插件(例如JavaPlugin
)。
我查看了更新的Gradle 6草案Sharing artifacts between projects,但它并不能真正回答该问题。
我的多项目结构如下:
top/
build.gradle
settings.gradle
producer/
build.gradle
myFile_template.txt
consumer/
build.gradle
我希望Copy
中的一个producer/build.gradle
任务将myFile_template.txt
复制并转换成$buildDir/target/myFile.txt
,而Copy
中的另一个consumer/build.gradle
任务应该进一步将myFile.txt
复制并转换为finalFile.txt
。
假定适当的解决方案将能够使用任务outputs.files
或诸如此类,这样consumer/build.gradle
无需明确提及$buildDir/target/myFile.txt
的位置。
(我是Gradle的新手)。
答案 0 :(得分:1)
Gradle为您提供了很多自由,但是我更希望项目仅通过Configurations和/或Artifacts彼此“共享”。我觉得一个项目永远都不要关心另一个项目的任务,而应该认为任务对每个项目都是私有的。
牢记这一原则,您可以做类似
的操作project(':producer') {
configurations {
transformed
}
task transformTemplate(type: Copy) {
from 'src/main/template'
into "$buildDir/transformed"
filter(...) // transformation goes here
}
dependencies {
// file collection derived from a task.
// Any task which uses this as a task input will depend on the transformTemplate task
transformed files(transformTemplate)
}
}
project(':consumer') {
configurations {
producerTransformed
}
dependencies {
producerTransformed project(path: ':producer', configuration: 'transformed')
}
task transformProducer(type:Copy) {
from configurations.producerTransformed // this will create a task dependency
into ...
filter ...
}
}