我正在尝试使用原生Win32 Java在Cygwin下编译一个Java项目。
在我的机器上的/cygdrive/c/jdk/bin下可以正确地找到Java二进制文件。
以下命令运行正常:
javac -d . ./gnu/kawa/util/PreProcess.java在./gnu/kawa/util/中生成PreProcess.class文件。然而,尝试对此调用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
...这个命令是由make调用的,这就是动态设置$CLASSPATH变量的地方。patch-source-list只是一个类名的列表。类路径中的:看起来很可疑,但是我不确定如何在测试;的同时不惹恼sh。
我唯一的怀疑是原生Java正在尝试gnu\kawa\util\PreProcess,但我认为cygwin可以透明地处理这一点。
有什么想法吗?耽误您时间,实在对不起。
发布于 2013-12-06 13:16:41
另一种选择是使用':‘构建路径,然后使用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)发布于 2012-06-08 16:51:38
请记住,JVM并不知道您正在使用cygwin bash shell。
两件事:
中使用';‘而不是':’
这应该是可行的:
export CLASSPATH="./gnu/kawa/util/PreProcess.class"
CLASSPATH=".;$CLASSPATH" java gnu.kawa.util.PreProcess发布于 2012-03-26 01:12:09
类路径中的
:看起来很可疑,但我不确定如何在测试;的同时不惹恼sh。
您完全正确:您需要使用;而不是:。至于如何使用它-正如Mat在上面提到的,你需要"quote"分号。其中的任何一个都可以工作:
CLASSPATH=.\;$CLASSPATH java Foo
CLASSPATH=.';'$CLASSPATH java Foo
CLASSPATH='.;'$CLASSPATH java Foo
CLASSPATH=".;$CLASSPATH" java Foo你可以用你最喜欢的那个。(第一个使用反斜杠,它引用了后面的单个字符。第二个和第三个使用单引号,即引号为零个或多个字符的序列。第四个使用双引号,除了它们仍然允许扩展变量$CLASSPATH之外,它类似于单引号。就此而言,您还可以编写如下内容
CLASSPATH=".;"$CLASSPATH java Foo如果你愿意的话。有关在Bash中引用的更多信息,请参阅上面的链接。)
https://stackoverflow.com/questions/9861623
复制相似问题