Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cygwin上的Java路径问题_Java_Cygwin - Fatal编程技术网

Cygwin上的Java路径问题

Cygwin上的Java路径问题,java,cygwin,Java,Cygwin,我正在尝试使用本机Win32 Java在Cygwin下编译一个Java项目 Java二进制文件可以在我的机器上的/cygdrive/c/jdk/bin下正确找到 以下命令工作正常: javac -d . ./gnu/kawa/util/PreProcess.java PreProcess.class文件在/gnu/kawa/util/中生成。尝试在此服务器上调用Java失败,但是: CLASSPATH=.:$CLASSPATH java gnu.kawa.util.PreProcess \

我正在尝试使用本机Win32 Java在Cygwin下编译一个Java项目

Java二进制文件可以在我的机器上的
/cygdrive/c/jdk/bin
下正确找到

以下命令工作正常:

javac -d . ./gnu/kawa/util/PreProcess.java
PreProcess.class
文件在
/gnu/kawa/util/
中生成。尝试在此服务器上调用Java失败,但是:

CLASSPATH=.:$CLASSPATH java gnu.kawa.util.PreProcess \
   %java6 +use:com.sun.net.httpserver +enable:XML \
   `sed -e 's|\([^ ]*\)|./\1|' < ./patch-source-list`
Error: Could not find or load main class gnu.kawa.util.PreProcess
...
CLASSPATH=。:$CLASSPATH java gnu.kawa.util.PreProcess\
%java6+使用:com.sun.net.httpserver+启用:XML\
`sed-e的| \([^]*\)./\1 |<./补丁源列表`
错误:无法找到或加载主类gnu.kawa.util.PreProcess
...
此命令由
make
调用,在这里动态设置
$CLASSPATH
变量<代码>补丁源代码列表只是一个类名列表。类路径中的
看起来可疑,但我不确定如何测试
而不是烦人的
sh

我唯一的另一个怀疑是,本机Java正在尝试
gnu\kawa\util\PreProcess
,但我认为cygwin可以透明地处理这个问题

有什么想法吗?谢谢你抽出时间

类路径中的
看起来可疑,但我不确定如何测试
而不是烦人的
sh

你完全正确:你需要使用
而不是
。至于如何使用它——正如Mat在上面提到的,你需要使用分号。其中任何一项都将起作用:

CLASSPATH=.\;$CLASSPATH java Foo

CLASSPATH=.';'$CLASSPATH java Foo

CLASSPATH='.;'$CLASSPATH java Foo

CLASSPATH=".;$CLASSPATH" java Foo
你可以用你最喜欢的。(第一个使用反斜杠,它引用后面的单个字符。第二个和第三个使用单引号,它引用零个或多个字符的序列。第四个使用双引号,它类似于单引号,只是它们仍然允许变量
$CLASSPATH
展开。因此,您还可以编写一些像

CLASSPATH=".;"$CLASSPATH java Foo

如果您愿意,请参阅上面的链接,以获取有关在Bash中引用的更多信息。)

记住,JVM不知道您正在使用cygwin Bash shell

两件事:

  • 对于类路径位置,请使用windows路径名。因此,没有“/cygdrive/c/somepath”,而是“c:\somepath\”(“/”和“\”可以互换使用)
  • 使用“;”而不是类路径列表中的“:”
  • 这应该起作用:

    export CLASSPATH="./gnu/kawa/util/PreProcess.class"
    CLASSPATH=".;$CLASSPATH" java gnu.kawa.util.PreProcess
    

    另一个选项是使用“:”构建路径,然后使用cygpath修复结果。在您的特定情况下,这可能是过分的,但在一般情况下,您可能会引用多个目录,其中一些目录可能被引用为绝对路径而不是相对路径,或者如果您使用cygwin符号链接,这将非常有用

    $ ln -s /cygdrive/c/development/libraries/ ../libs
    $ cygpath -pw /cygdrive/c/development/:.:../libs
    C:\development\;.;C:\development\libraries\
    
    因此,您将像以前一样构建CLASSPATH变量,并在最后阶段运行

    CLASSPATH="`cygpath -pw "$CLASSPATH"`" java (whatever)
    

    尝试使用
    CLASSPATH=';'$CLASSPATH
    谢谢你,Mat!这就是解决办法。