如何在Gradle中的子项目之间复制文件

时间:2019-09-03 15:41:19

标签: gradle

如何使子项目复制同级子项目生成的文件?所有这些都具有适当的依赖性管理,并且不假定使用任何特定于语言的插件(例如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的新手)。

1 个答案:

答案 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 ... 
   } 
}