2012-03-25 41 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