我们在中心点使用一些Gradle基础脚本。此脚本包含在大量脚本中的“apply from:”中。此基本脚本需要访问相对于脚本的文件。如何找到基本脚本的位置?
一个build.gradle的示例:
apply from: "../../gradlebase/base1.gradle"
base1.gradle的样本
println getScriptLocation()
答案 0 :(得分:7)
我不确定这是否被视为内部接口,但DefaultScriptHandler
有getSourceFile()
方法,并且当前实例可通过buildscript
属性访问,因此您可以使用buildscript.sourceFile
。它是指向当前脚本的File
实例
答案 1 :(得分:5)
我仍然不确定我是否理解这个问题,但您可以使用以下代码找到当前gradle脚本的路径:
println project.buildscript.sourceFile
它提供了当前正在运行的脚本的完整路径。这就是你要找的东西吗?
答案 2 :(得分:2)
我把它从堆栈中拉出来。
String r = file('.').toString();
buildscript.metaClass.__script__ = file(Thread.currentThread().stackTrace*.fileName?.find { it.startsWith r })
针对那些不喜欢杂乱的人的紧凑版本:
{{1}}
答案 3 :(得分:1)
我目前的解决方法是从调用脚本中注入路径。这是丑陋的黑客。
调用者脚本必须知道基本脚本的位置。我在调用之前将此路径保存在属性中:
ext.scriptPath = '../../gradlebase'
apply from: "${scriptPath}/base1.gradle"
在base1.gradle中,我还可以访问属性$ {scriptPath}
答案 4 :(得分:1)
另一个解决方案是在全局gradle设置中为A.gradle的位置设置一个属性:{userhome} /.gradle / gradle.properties
答案 5 :(得分:0)
您可以在相对路径中搜索此脚本,如:
if(new File(rootDir,'../path/A.gradle').exists ()){
apply from: '../path/A.gradle'
}
答案 6 :(得分:0)
此解决方案尚未使用'apply from'进行测试,但已使用settings.gradle进行测试
Gradle有一个Script.file(String path)函数。我通过
解决了我的问题def outDir = file("out")
def releaseDir = new File(outDir, "release")
'out'目录始终位于调用此行的build.gradle旁边。