在读取“user.dir”属性时,根据代码的启动方式,从我的代码中获得一致的结果有点噩梦。
我有一个 gradle 项目,在 src/main/groovy 中有一些代码和脚本,在 source/test/groovy 中有测试,从命令行或在 IDE 中运行代码(直接运行脚本)并运行一些测试
我为自己构建了一个新的 gradle 项目,并试图在 src/main/resources 中打开文件资源。
当我运行单元测试时, user.dir = 'project root' (这是我所期望的)。当我在 IDE 中构建脚本并右键单击时,user.dir 属性返回源主目录中的当前脚本目录路径!
所以在测试中的查找返回了不同的测试。
我也尝试在 build.gradle 中设置它
//setup proj.dir as project root
System.setProperty( "proj.dir", project.projectDir.toString() )
并构建一个 gradle 任务来打印这个 - 它显示项目目录作为结果。
在将属性“user.dir”读取为项目根目录时,intellij 中似乎没有全局“修复或配置”始终获得一致的返回。除非我错过了什么?
在 IDE 中,如果我查看运行/调试配置 - 在默认情况下,groovy 的条目表示工作目录是项目根目录(如 id 预期的那样)。但是,当我查看 groovy 节点和那里的脚本('testPCE')时,工作目录被设置为脚本的当前位置。
一旦我发现我可以编辑 IDE 运行/调试配置,我将工作目录重置为项目根目录,现在得到一致的结果。但如果我需要,似乎必须在每个脚本上检查这一点。
所以我的问题是我可以做什么/配置/设置,以便我获得一个始终返回项目根目录的环境变量,无论是从命令行启动,在gradle中,通过从IDE中右键单击脚本运行,还是从测试中运行IDE/ 或从命令行
必须有一种“健壮”的方法来确保对某个环境变量的所有查找都将返回相同的答案,而不管您的代码是如何执行的。
知道我知道发生了什么,我可以调整我的 ide 以设置我想要工作目录的位置 - 但必须继续检查。我想要一些可靠的东西,无论是它的 IDE、命令行、tomcat Web 容器内部等,以获取“项目根”并从这个稳定点可靠地构建路径,这将始终如一地工作
有谁知道如何做到这一点?