代码之家  ›  专栏  ›  技术社区  ›  Keith Randall

如何让java识别cygwin下的符号链接

  •  1
  • Keith Randall  · 技术社区  · 14 年前

    下面是一个非常简单的java程序,用于打印文件的第一行:

    import java.io.*
    public class test {
      public static void main(String[] args) throws IOException {
        System.out.print(new BufferedReader(new FileReader(args[0])).readLine());
      }
    }
    

    $ echo foo > testfile
    $ ln -s testfile symlink_to_testfile
    $ java test testfile
    foo
    $ java test symlink_to_testfile
    !<symlink> ?t e s t f i l e
    

    如何说服java遵循符号链接?我希望有比自己实现重定向更简单的方法。

    4 回复  |  直到 14 年前
        1
  •  0
  •   Stephen C    14 年前

    我不认为有一个简单的答案。正如各种页面所述,Cygwin是一个应用程序套件而不是操作系统,Sun不支持Cygwin上的Java。

    然而,它 可以从源代码为Cygwin构建jdk6。当然, this page 意味着这是可能的。这是否给你一个理解Cygwin风格符号链接的JDK是任何人猜测的…:-)

        2
  •  2
  •   derpaderp    12 年前

    我也有这个问题,所以我写了一个shell包装器,其中包括

    # java runs as native windows program, so convert pathnames
    WINDOWS_ARGS=""
    for ARG in $*
    do
    if [ -e $ARG ]
    # pathname argument is only converted if the file exists,
    # so this trick may not be appropriate everywhere...
    then
    WINDOWS_ARGS="$WINDOWS_ARGS `cygpath -w $ARG`"
    else
    WINDOWS_ARGS="$WINDOWS_ARGS $ARG"
    fi
    done
    java -jar `cygpath -w myprogram.jar` $WINDOWS_ARGS
    

    http://cygwin.com/ml/cygwin/2004-07/msg00163.html

    cygpath 是转换路径字符串的建议方法。。。我来到这个页面是因为我想打开一个 File 对象的硬编码路径可能是cygwin符号链接。还是不确定。。。运行子流程似乎很极端,需要 cygpath公司

        3
  •  2
  •   wnrph    12 年前

    我喜欢derpaderp的答案,所以我根据自己的需要进行了调整。更一般的做法是不假定 -jar 选项,并且不存在包含空格的参数的问题。我已将此脚本移到 /usr/bin/java 并使其可执行。

    #!/bin/sh    
    
    JAVA_PATH="/cygdrive/c/Program Files/Java/jre7/bin/java"
    
    
    declare -a WINDOWS_ARGS
    i=0
    for ARG in "$@"
    do
    
        if [ -e "$ARG" ]; then
            # pathname argument is only converted if the file exists,
            # so this trick may not be appropriate everywhere...
            WINDOWS_ARGS[$i]="`cygpath -w $ARG`"
        else
            WINDOWS_ARGS[$i]="$ARG"
        fi
        (( i++ ))
    done
    "$JAVA_PATH" "${WINDOWS_ARGS[@]}"
    
        4
  •  0
  •   Paul Jowett    14 年前

    您使用的是什么版本的Java? This Java Tutorial Java7 预发布。