2012-03-25 57 views
1

我正在尝试使用本机Win32 Java编译Cygwin下的Java项目。Cygwin上的Java路径问题

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

以下命令工作正常:在./gnu/kawa/util/产生

javac -d . ./gnu/kawa/util/PreProcess.java 

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可以透明地处理该问题。

任何想法?谢谢你的时间。

+1

用'CLASSPATH =尝试 ';' $ CLASSPATH' – Mat 2012-03-25 16:06:34

+0

谢谢垫!这是修复。 – 2012-03-25 17:08:56

回答

4

另一种选择是使用来构建路径“:”,然后使用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) 
1

在classpath中:看起来可疑,但我不知道如何测试;虽然不讨厌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中引用的更多信息。)

+0

感谢您的信息ruakh! – 2012-03-25 19:49:26

2

记住, JVM不知道你使用的是cygwin bash shell。

两件事情:

  1. 的类路径中的位置,使用Windows路径名。因此,没有“/ cygdrive/C/somepath”,但“C:\ somepath \”( “/” 和 “\” 可以互换使用不过)
  2. 使用 ';'而不是“:”在类路径列表

这应该工作:

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