如何在Gradle中的子项目之间复制文件
如何使子项目复制同级子项目生成的文件?所有这些都需要适当的依赖关系管理,并且不需要假设使用任何特定于语言的插件(如如何在Gradle中的子项目之间复制文件,gradle,Gradle,如何使子项目复制同级子项目生成的文件?所有这些都需要适当的依赖关系管理,并且不需要假设使用任何特定于语言的插件(如JavaPlugin) 我已经看过Gradle 6的最新草案,但它并没有真正回答这个问题 我的多项目结构类似于: top/ build.gradle settings.gradle producer/ build.gradle myFile_template.txt consumer/ build.gradle 我想要一个Copy-任务
JavaPlugin
)
我已经看过Gradle 6的最新草案,但它并没有真正回答这个问题
我的多项目结构类似于:
top/
build.gradle
settings.gradle
producer/
build.gradle
myFile_template.txt
consumer/
build.gradle
我想要一个Copy
-任务在producer/build.gradle
中复制并转换myFile\u template.txt
到$buildDir/target/myFile.txt
中,另一个Copy
-任务在consumer/build.gradle
中应该进一步复制并将myFile.txt
转换到finalFile.txt
假定一个合适的解决方案能够使用taskoutputs.files
或类似的文件,这样consumer/build.gradle
就不需要明确提到$buildDir/target/myFile.txt
的位置
(我对Gradle完全陌生)。Gradle给了你很多自由,但我更喜欢项目之间通过和/或“共享”。我觉得一个项目永远不应该关心另一个项目的任务,并且觉得这些任务对每个项目都是私有的 考虑到这个原则,你可以做如下事情
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 ...
}
}
谢谢我尝试了上述方法(注释掉
过滤器
行,并将中的路径放入
,但是gradle任务
中说:“带有路径的项目”:在根项目“so_57774921”中找不到生产者。另外,消耗品依赖项和可解析依赖项之间的区别如何文档强调的(可以使用
/可以解决
)最后,我担心配置中的。producerTransformed
表示整个文件夹内容(例如,由其他任务创建的内容)不仅仅是transformTemplate
任务复制的东西,我也不知道。最后,是否不需要工件?您需要在多模块构建中将生产者和消费者配置为模块。它们需要在settings.gradle中配置。您可以在依赖项{…}中将文件添加到配置中
block。您会注意到,我声明了正在添加的确切配置,因此它不会包括整个项目。请试用并返回。事实上,我的设置。gradle
已经消失。现在它似乎可以工作了,只是我担心配置中的。producerTransformed
似乎是有保证的,即它指的是整个transformTemplate
生成的文件。因此,如果存在其他文件,它们也将由transformProducer
复制,这是不可取的。此外,我不理解依赖项
块:已转换
配置(使用相同的名称)或者它是否可以使用其他名称,如transformedDependence
,同时保留transformed
作为配置名称?最后,您的方法是否有任何缺点,而不是我链接的文档中使用的基于工件{}
的方法(因为您的方法似乎更简单)?是的,dependencies{…}
块中的第一件事是将FileCollection
添加到的配置