当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Gradle:从自定义构建文件开始获取根项目目录路径》经验,为你挑选了2个好方法。

我的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缓存目录的路径.



1> will..:

我通过确保将Java userDir设置到我文件顶部的项目目录(即project.projectDir)来解决此问题build.gradle,如下所示:

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

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

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

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

    println  "Root project:   ${project.rootProject}";
    println  "  rootDir:      ${project.rootDir}"
    println  "  projectDir:   ${project.projectDir}";
    println  "  project dir:  ${System.getProperty("user.dir")}";

如果你有子项目,projectDir则不一样rootDir.

这并没有解决我的实际问题,但它确保我打开正确的文件(相对于的位置)build.gradle.



2> Vampire..:

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


嘿谢谢!这就像魅力!我只是意识到我可以通过`rootProject.projectDir`获取当前项目目录的路径.但就我而言,您的解决方案更简单,更清洁.
推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有