groovy Gradle:在使用自定义构建文件启动时获取根项目目录路径

vs3odd8k  于 2022-11-01  发布在  其他
关注(0)|答案(4)|浏览(337)

我的Gradle项目的结构如下:

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

通常,要获得foo文件夹的绝对路径,我只需在根文件build.gradle中执行new File('foo').getAbsolutePath()即可。
但是,如果您从项目目录之外运行gradle脚本,这将不起作用,例如执行以下操作:

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

使用前面的命令,gradle会在项目的父目录中查找foo目录,因为我是从那里启动脚本的。
是否有办法获得build.gradle所在项目的绝对路径,即使您从另一个目录启动脚本也是如此?或者是否有其他办法获得脚本所在同一文件夹中某个目录的引用?
我也尝试过使用getClass().protectionDomain.codeSource.location.path,但它返回的是gradle缓存目录的路径。

0s0u357o

0s0u357o1#

我通过确保Java userDir被设置到我的build.gradle文件顶部的project目录(即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")}";

如果您有子项目,则projectDirrootDir不同。
这并没有解决我的 * 实际 * 问题,但它确保了我打开了正确的文件(相对于build.gradle的位置)。

5us2dqdw

5us2dqdw2#

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

zlhcx6iw

zlhcx6iw3#

在build.gradle文件中,只需使用projectDir即可获取build.gradle文件的绝对路径。您可以从此处导航项目的文件。
https://www.tutorialspoint.com/gradle/gradle_build_script.htm

gev0vcfq

gev0vcfq4#

我使用**new File()**和路径将源目录导入gradle文件,但在配备M1芯片的MacBook中,它不起作用,让我分享一下以前版本和新版本的代码:
旧代码:

new File("app/src/")

更新的代码:

new File(project.projectDir.getAbsolutePath() + "/src/")

相关问题