buildscript {
def root = file('.').toString();
// We have to seek through, since groovy/gradle introduces
// a lot of abstraction that we see in the trace as extra frames.
// Fortunately, the first frame in the build dir is always going
// to be this script.
buildscript.metaClass.__script__ = file(
Thread.currentThread().stackTrace.find { ste ->
ste.fileName?.startsWith root
}.fileName
)
// later, still in buildscript
def libDir = "${buildscript.__script__.parent}/lib"
classpath files("${libDir}/custom-plugin.jar")
}
// This is important to do if you intend to use this path outside of
// buildscript{}, since everything else is pretty asynchronous, and
// they all share the buildscript object.
def __buildscripts__ = buildscript.__script__.parent;
为那些不喜欢杂乱的人准备的紧凑版:
String r = file('.').toString();
buildscript.metaClass.__script__ = file(Thread.currentThread().stackTrace*.fileName?.find { it.startsWith r })
8条答案
按热度按时间wtlkbnrh1#
我不确定这是否被认为是一个内部接口,但是
DefaultScriptHandler
有一个getSourceFile()
方法,并且当前示例可以通过buildscript
属性访问,所以你可以只使用buildscript.sourceFile
。它是指向当前脚本的File
示例yzckvree2#
我仍然不确定我是否很好地理解了这个问题,但你可以使用以下代码找到当前gradle脚本的路径:
它给出了当前正在运行的脚本的完整路径。这就是你要找的吗?
xienkqul3#
我把它从堆栈中拉出来。
为那些不喜欢杂乱的人准备的紧凑版:
af7jpaap4#
另一种解决方案是在全局gradle设置中为A.gradle的位置设置一个属性:{userhome}/.gradle/gradle.properties
vwhgwdsa5#
我目前的解决方法是从调用脚本注入路径。这是一个丑陋的黑客。
调用方脚本必须知道基脚本的位置。在调用之前,我将此路径保存在属性中:
在base1.gradle中,我还可以访问属性${scriptPath}
kg7wmglp6#
您可以在相对路径中搜索此脚本,如下所示:
ecfdbz9o7#
此解决方案尚未使用'apply from'进行测试,但已使用settings.gradle进行测试
Gradle有一个Script.file(String path)函数。我通过做来解决我的问题
并且'out'目录总是紧挨着调用此行的build.gradle。
dojqjjoe8#
我正在寻找gradleKotlinDSL文件的位置,就像我们为shell脚本所做的那样
导出LNX_SPI_ROOT="$(cd“$(dirname“${BASH_SOURCE[0]}”)”&& pwd)”