Gradle:从自定义构建文件开始获取根项目目录路径

时间:2017-01-13 12:53:42

标签: gradle groovy

我的Gradle项目的结构如下:

Project
├── app
     └── build.gradle
├── foo
     └── bar.txt
·
·
·
└── build.gradle

通常要获取foo文件夹的绝对路径,我只需在根new File('foo').getAbsolutePath()文件中执行build.gradle

但遗憾的是,如果您从项目目录外部运行gradle脚本,则无法执行此操作,例如执行以下操作:

$ trunk/gradlew -b trunk/build.gradle tasks

使用上一个命令,gradle在项目的父目录中查找foo目录,因为我从那里开始编写脚本。

有没有办法获得build.gradle所在项目的绝对路径,即使你从另一个目录启动你的脚本?或者是否有其他方法可以在脚本所在的同一文件夹中获取目录的引用?

我还尝试使用getClass().protectionDomain.codeSource.location.path,但它返回了gradle缓存目录的路径。

3 个答案:

答案 0 :(得分:27)

我通过确保将Object.watch()设置为userDir文件顶部的项目目录(即project.projectDir)来解决此问题,如下:

build.gradle

可以通过执行单独的(Groovy)代码文件来检查,例如:

    System.setProperty( "user.dir", project.projectDir.toString() )
    println  "  project dir:  "+ System.getProperty("user.dir");

您可以在使用这些语句之前和之后输出Gradle项目值。

    println "User Dir: ${System.getProperty( 'user.dir' )}"

如果您有子项目, println "Root project: ${project.rootProject}"; println " rootDir: ${project.rootDir}" println " projectDir: ${project.projectDir}"; println " project dir: ${System.getProperty("user.dir")}"; projectDir不同。

这还没有解决我的实际问题,但它确保我打开了正确的文件(相对于rootDir的位置。

答案 1 :(得分:18)

根据定义,

new File('foo')(查看它的JavaDoc)会创建一个相对于当前工作目录的路径,因此取决于您从哪里调用应用程序。如果您想要一个相对于项目文件夹的路径,请使用project.file('foo'),或者project是解析方法的默认值file('foo'),您将获得针对项目目录解析的相对路径,不是工作目录。所以使用file('foo').absolutePath就可以了。

答案 2 :(得分:1)

在build.gradle文件中,只需使用Participant.find({participants: {$all: persons}}).exec() .then(connected => { console.log(connected); // perform some stuff }); 获取build.gradle文件的绝对路径。从那里你可以浏览你的项目的文件。阅读本文以获取更多信息:

https://www.tutorialspoint.com/gradle/gradle_build_script.htm