我的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缓存目录的路径。
4条答案
按热度按时间0s0u357o1#
我通过确保Java
userDir
被设置到我的build.gradle
文件顶部的project目录(即project.projectDir
)来解决这个问题,如下所示:这可以通过执行一个单独的(Groovy)代码文件来检查,例如:
您可以在使用这些语句之前和之后输出Gradle项目值。
如果您有子项目,则
projectDir
与rootDir
不同。这并没有解决我的 * 实际 * 问题,但它确保了我打开了正确的文件(相对于
build.gradle
的位置)。5us2dqdw2#
根据定义
new File('foo')
(查看它的JavaDoc)生成一个相对于当前工作目录的路径,因此取决于您从哪里调用应用程序。如果您想要一个相对于项目文件夹的路径,请使用project.file('foo')
,或者由于project
是解析方法的默认值,因此只需file('foo')
,您就可以获得相对于项目目录解析的相对路径。而不是工作目录。所以使用file('foo').absolutePath
就可以了。zlhcx6iw3#
在build.gradle文件中,只需使用
projectDir
即可获取build.gradle文件的绝对路径。您可以从此处导航项目的文件。https://www.tutorialspoint.com/gradle/gradle_build_script.htm
gev0vcfq4#
我使用**new File()**和路径将源目录导入gradle文件,但在配备M1芯片的MacBook中,它不起作用,让我分享一下以前版本和新版本的代码:
旧代码:
更新的代码: