当前位置: 首页 > 知识库问答 >
问题:

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

那宏大
2023-03-14

我的Gradle项目的结构如下:

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

通常,要获取 foo 文件夹的绝对路径,我只需在根 build.gradle 文件中执行新的文件(“foo”)即可。

但不幸的是,如果您从项目目录外部运行gradle脚本,例如执行如下操作,则此方法不起作用:

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

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

是否有方法获得项目的绝对路径,即构建位置。gradle是,即使您从另一个目录启动脚本?或者有没有其他方法来获取脚本所在文件夹中目录的引用?

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

共有3个答案

陈扬
2023-03-14

构建中。gradle文件只需使用projectDir来获取构建的绝对路径。渐变文件。从那里,您可以导航项目的文件。请阅读以下内容以了解更多信息:

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

全昊焜
2023-03-14

new File('foo')根据定义(查看它的JavaDoc)创建一个相对于当前工作目录的路径,因此取决于您从何处调用应用程序。如果需要相对于项目文件夹的路径,请使用project。file('foo'),或者作为projectproject是解析方法的默认值,只需file('foo',file('foo')。absolutePath,您会没事的。

公孙成仁
2023-03-14

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

    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")}";

如果您有子项目,project ectDirrootDir不同。

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

 类似资料:
  • 嗨,我有两个项目,文件如下: 项目1:构建。格拉德尔 项目2:构建。格拉德尔 当我从Project 1执行test1任务时,我得到以下错误: 正在运行任务测试2 失败:生成失败,出现异常。 > 错误:评估脚本时出现问题。建筑属性(无此类文件或目录) 尝试:使用--stacktrac选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获取更多日志输出。 建筑失败 总时间:5.779秒

  • Laravel版本5.6 我正试图通过“自动加载”下的文件将一些类添加到我的项目中。 Composer.json 每当我执行时,两个文件都会出现错误,表示找不到文件。 PHP警告:未捕获错误异常:require(C:\laravel projects\project\vendor\composer/./../app/helpers/dbUsers.PHP):无法打开流:C:\laravel pro

  • 前言 这一篇,我们将接着上篇来完成创建项目文件、目录结构。 回顾 先回顾一下现在项目有哪些东西了: . ├── app │   ├── app.vue │   ├── common │   │   ├── img │   │   ├── js │   │   └── scss │   ├── index.html │   ├── index.js │   ├── router

  • 我正在改变我们的项目,以使用gradle作为构建工具,但正在与2个问题斗争;

  • 我对Gradle是全新的,但在我的Build.Gradle中尝试了以下功能:

  • 我的程序从不是项目根目录的位置读入文档。文档包含一个相对路径。当程序应用该路径时,它确实从项目的根目录开始。如何使其应用来自文档原始位置的路径? 以下是细节。有点长,但很简单。 我在Eclipse中有一个Java项目,位于 该程序运行一个XSL转换,该转换以Schematron模式作为输入,并产生一个新的XSLT样式表作为输出 它包含这一行,还有几条类似的: 如果从模式的位置开始,并应用该相对路径