Cygwin上的Java路径问题
我正在尝试使用本机Win32 Java在Cygwin下编译一个Java项目 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 \
/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!这就是解决办法。