我的Gradle项目的结构如下:
Project
??? app
??? build.gradle
??? foo
??? bar.txt
·
·
·
??? build.gradle
Run Code Online (Sandbox Code Playgroud)
通常要获取foo文件夹的绝对路径,我只需new File('foo').getAbsolutePath()在根build.gradle文件中执行即可.
但遗憾的是,如果从项目目录外部运行gradle脚本,则无法执行此操作,例如执行以下操作:
$ trunk/gradlew -b trunk/build.gradle tasks
Run Code Online (Sandbox Code Playgroud)
使用上一个命令,gradle正在查找foo项目父项中的目录,因为我从那里启动了脚本.
有没有办法获得build.gradle所在项目的绝对路径,即使你从另一个目录启动你的脚本?或者有没有其他方法来获取脚本所在的同一文件夹中的目录引用?
我也尝试过,getClass().protectionDomain.codeSource.location.path但它返回了gradle缓存目录的路径.
wil*_*ill 35
我通过确保将Java userDir设置到我文件顶部的项目目录(即project.projectDir)来解决此问题build.gradle,如下所示:
System.setProperty( "user.dir", project.projectDir.toString() )
println " project dir: "+ System.getProperty("user.dir");
Run Code Online (Sandbox Code Playgroud)
这可以通过执行单独的(Groovy)代码文件来检查,例如:
println "User Dir: ${System.getProperty( 'user.dir' )}"
Run Code Online (Sandbox Code Playgroud)
您可以在使用这些语句之前和之后输出Gradle项目值.
println "Root project: ${project.rootProject}";
println " rootDir: ${project.rootDir}"
println " projectDir: ${project.projectDir}";
println " project dir: ${System.getProperty("user.dir")}";
Run Code Online (Sandbox Code Playgroud)
如果你有子项目,projectDir则不一样rootDir.
这并没有解决我的实际问题,但它确保我打开正确的文件(相对于的位置)build.gradle.
Vam*_*ire 21
new File('foo')根据定义(查看其JavaDoc)创建一个相对于当前工作目录的路径,因此取决于您从哪里调用应用程序.如果您想要一个相对于项目文件夹的路径,请使用project.file('foo'),或者project只是解析方法的默认file('foo')路径,您将获得针对项目目录而不是工作目录解析的相对路径.所以使用file('foo').absolutePath,你会没事的.
在 build.gradle 文件中只是projectDir用来获取build.gradle 文件的绝对路径。从那里你可以浏览你的项目文件。阅读本文了解更多信息:
https://www.tutorialspoint.com/gradle/gradle_build_script.htm
| 归档时间: |
|
| 查看次数: |
55923 次 |
| 最近记录: |