V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
laqow
V2EX  ›  Java

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

  •  
  •   laqow · 2021-04-02 09:48:39 +08:00 · 1336 次点击
    这是一个创建于 1112 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 解析回源路径。

    3 条回复    2021-04-02 17:39:22 +08:00
    nannanziyu
        1
    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
        2
    Osk  
       2021-04-02 11:36:10 +08:00 via Android
    我记得 mklink 有几种参数,试试其它类型的 link ?
    laqow
        3
    laqow  
    OP
       2021-04-02 17:39:22 +08:00 via Android
    @nannanziyu 谢谢。对 Java 不熟,请问这个参数可以在 java -D 或什么地方全局设置吗?


    @Osk 对文件夹的有 /d 和 /j 两种方式,两种都会解析回原始路径
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2796 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:35 · PVG 23:35 · LAX 08:35 · JFK 11:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.