如何找到当前gradle脚本的路径?

时间:2014-07-02 10:01:11

标签: file gradle

我们在中心点使用一些Gradle基础脚本。此脚本包含在大量脚本中的“apply from:”中。此基本脚本需要访问相对于脚本的文件。如何找到基本脚本的位置?

一个build.gradle的示例:

apply from: "../../gradlebase/base1.gradle"

base1.gradle的样本

println getScriptLocation()

7 个答案:

答案 0 :(得分:7)

我不确定这是否被视为内部接口,但DefaultScriptHandlergetSourceFile()方法,并且当前实例可通过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旁边。

相关问题