如何修改设置避免 windows 上 Java 将 symlink 解析回源路径

2021-04-02 09:48:39 +08:00
 laqow

Windows 没有 symlink,但有一个 mklink 工具能在 NTFS 上创建类似 Linux 的符号链接,从而让一些需要绝对路径的操作变成相对路径,避免一些跨 linux 和 windows 的程序在解析带盘符路径时遇到问题。

然而鸡掰 Java 虚拟机总是将 mklink 创建的 symlink 还原回原始路径,让这个方法不可用。

可能是 Java 适配了 window 的 symlink,并把它当成传统的快捷方式,不改变代码时类似./def/temp(<==>E:\abc\temp)的地址会变成访问 E:\abc\temp,这样在访问类似./def/temp/../ 的路径时,Java 实际在访问 E:\abc 或者./def/E/abc/../ 这样的路径,而不是./def,让一些没有做系统适配的程序出问题。

请问如何修改设置避免 windows 上 Java 将 symlink 解析回源路径。

1357 次点击
所在节点    Java
3 条回复
nannanziyu
2021-04-02 11:07:08 +08:00
https://docs.oracle.com/javase/8/docs/api/java/nio/file/LinkOption.html
默认行为是 Follow,也就是原始路径; NOFOLLOW_LINKS,不寻找原始路径
Osk
2021-04-02 11:36:10 +08:00
我记得 mklink 有几种参数,试试其它类型的 link ?
laqow
2021-04-02 17:39:22 +08:00
@nannanziyu 谢谢。对 Java 不熟,请问这个参数可以在 java -D 或什么地方全局设置吗?


@Osk 对文件夹的有 /d 和 /j 两种方式,两种都会解析回原始路径

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/767432

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX