Java OSX jdk 1.8.0_111上的user.dir属性是否已损坏?其他操作系统、版本如何?
我只有这个mac,我想知道这个问题是否存在于其他操作系统或JDK上。如果第二行到最后一行验证绝对路径是否引用真实文件(并与第一个文件abs路径匹配),但f2.exists调用返回false,就像它不存在一样,则此测试失败 我对windows和linux很好奇,这是否也失败了Java OSX jdk 1.8.0_111上的user.dir属性是否已损坏?其他操作系统、版本如何?,java,Java,我只有这个mac,我想知道这个问题是否存在于其他操作系统或JDK上。如果第二行到最后一行验证绝对路径是否引用真实文件(并与第一个文件abs路径匹配),但f2.exists调用返回false,就像它不存在一样,则此测试失败 我对windows和linux很好奇,这是否也失败了 @Test public void testUserDirProp() { File f = new File("src/test/resources/logback-test.xml"); //asser
@Test
public void testUserDirProp() {
File f = new File("src/test/resources/logback-test.xml");
//assert absolute path is correct
Assert.assertEquals("/Library/Workflow/webpieces/core/core-util/src/test/resources/logback-test.xml", f.getAbsolutePath());
Assert.assertTrue(f.exists());
//NOW, change user.dir
System.setProperty("user.dir", "/Library/Workflow/webpieces/core/core-util/src");
//Now, f2 is relative to NEW user.dir property
File f2 = new File("test/resources/logback-test.xml");
//verify absolute path is still the full correct path for f2 and it is
Assert.assertEquals("/Library/Workflow/webpieces/core/core-util/src/test/resources/logback-test.xml", f2.getAbsolutePath());
//since absolute path was correct, it should exist
Assert.assertTrue(f2.exists());
}
user.dir
属性未损坏。不支持对其进行设置,也不能保证以任何特定方式进行操作。请参阅和链接的票证:
经过仔细考虑,我们仍然不认为当前的行为可以/应该改变。我们从未保证“user.dir”在任何给定的时间都会被查询,不幸的是,jdk假设这个属性不会改变。理想情况下,我们应该引入“只读”系统属性的概念,以防止此系统属性和其他系统属性发生不受支持的更改
在jvm启动期间初始化的“user.dir”应该用作
信息性/只读系统属性,请尝试通过命令行对其进行自定义
-Duser.dir=xyz将以依赖于实现/未指定的行为结束。
当前的文件系统实现在很大程度上取决于以下假设:
我们没有类似“chdir”或“chdir”的功能(比如use-Duser.dir=xyz)
这将把“当前用户目录”更改为不是jvm启动的唯一目录。
也就是说,FileIn/OutputStream的不一致行为确实是一个错误
行为(FileIn/OutputStream的openimpl直接变为naiveopen
由于上述假设,未咨询java文件/文件系统
上文)
要更改当前实现以支持“可自定义”user.dir,请执行以下操作:
一件大事,很多类/行的变化,只有当我们相信它是
真的值得做
哦,谢谢!伙计,如果他们在设置时抛出一个异常肯定会很好,所以我们都知道这一点。看起来他们应该尽快失败,而不是让人们浪费时间处理奇怪的问题。哦,好吧。