我的Gradle项目之一有10个子项目。对于Gradle任务中的每个项目,我想生成一个Java属性文件来指定项目名称,因为我需要在运行时知道项目名称。属性文件应转到每个项目的资源目录。因为项目的数量可能会随着时间的推移而增长,所以我认为不要为每个项目添加资源文件,而是通过Gradle生成它。
例如,对于项目:custom:a ,我需要在资源目录中有一个 project-info.properties 文件,内容为:
project=a
对于项目:custom:b ,我想要一个类似的 project-info.properties 文件:
project=b
如何生成文件并将其放入Java资源目录?
我试图在所有项目中添加以下规则,但似乎不再生成这些文件(也许我已经引入了一些重大更改):
processResources {
def resourcesDir = sourceSets.main.output.resourcesDir
resourcesDir.mkdirs()
def contents = "projectInfo.project=$project.name"
new File(resourcesDir, "project-info.properties").text = contents
}
编辑:文件应在构建目录中生成,而不是在源文件中生成。
答案 0 :(得分:3)
我强烈建议您不要在正常的源目录中生成文件,即在源代码管理(SCM)中检入的文件。最好在某个地方的 build 目录下生成文件,并将该位置添加到相关的源集中。
第一步是创建一个生成属性文件的任务:
ext.genOutputDir = file("$buildDir/generated-resources")
task generatePropInfo {
ext.outputFile = file("$genOutputDir/project-info.properties")
outputs.file(outputFile)
doLast {
outputFile.text = "projectInfo.project=${project.name}"
}
}
您甚至可能考虑将其设置为自定义任务类型,这样就不必使用额外的属性和运行时API进行增量构建。
完成后,您只需要配置源集,以便将 generate-resources 目录中的文件作为源集的输出包括在内。在任务定义的之后
sourceSets.main.output.dir genOutputDir, builtBy: generatePropInfo
如果您要让多个任务为一个源集生成“输出”文件,则创建一个依赖于所有任务的聚合任务(例如generateResources
)并将builtBy
参数更新为该任务-buildBy: generateResources
。
随时问有关解决方案的任何问题。
答案 1 :(得分:0)
尝试在执行阶段而不是配置中运行它:
swal({
title: 'User Contacts',
html: $('.sweetalert_template #all_contacts').html(),
customClass: 'swal-logout',
showCloseButton: true,
});
processResources {
doFirst {
def resourcesDir = sourceSets.main.output.resourcesDir
resourcesDir.mkdirs()
def contents = "projectInfo.project=$project.name"
new File(resourcesDir, "project-info.properties").text = contents
}
}
应该可以解决问题,并在此任务运行之前创建文件