2012-03-13 118 views
14

我正在嘗試編寫一個BASH腳本來讓我的Java程序運行(常見問題,對吧?)。我只是無法完成它的工作。許多編輯之後,這裏就是我想設置classpath中,然後執行該程序:如何從Cygwin運行Java

java -classpath 'cygpath -u "/cygdrive/c/Projects/common/lib/rome-1.0.jar:/cygdrive 
/c/Projects/common/lib/jdom-1.0.jar:/cygdrive/c/Projects/common/lib/jsoup-1.6.1.jar: 
/cygdrive/c/Projects/common/lib/mysql-connector-java-5.1.18-bin.jar:/cygdrive/c/Projects 
/Freereader/bin/"' com.free.syndication.SQLfeeder 

對不起的那些雜亂,我只是想一次做的一切。它告訴我,主類我的程序不能被發現!((

任何想法?

+0

您是否試過'echo'cygpath -u「/cygdrive/c/Projects/common/lib/rome-1.0。jar:/ cygdrive /c/Projects/common/lib/jdom-1.0.jar:/cygdrive/c/Projects/common/lib/jsoup-1.6.1.jar: /cygdrive/c/Projects/common/lib /mysql-connector-java-5.1.18-bin.jar:/cygdrive/c/Projects /Freereader/bin /「''確保它能夠生成正確的路徑? – TheLQ 2012-03-13 19:37:46

+0

如果你願意,它會不會更容易將這些jar添加到你的類路徑而不是全部輸入嗎?或者,你不能這樣做嗎? – 2012-03-13 19:41:21

+0

有關Java和Cygwin的常見問題解答:http://www.inonit.com/cygwin/faq/ - 給出一個很好的解釋什麼時候以及如何轉換Cygwin和Windows之間的類路徑Java – 2016-06-08 09:24:27

回答

11
  • Java類路徑使用分號作爲令牌分隔符。
  • 使用反引號,而不是單引號

嘗試:

java -classpath `cygpath -u "/cygdrive/c/Projects/common/lib/rome-1.0.jar;/cygdrive 
/c/Projects/common/lib/jdom-1.0.jar;/cygdrive/c/Projects/common/lib/jsoup-1.6.1.jar; 
/cygdrive/c/Projects/common/lib/mysql-connector-java-5.1.18-bin.jar;/cygdrive/c/Projects 
/Freereader/bin/"` com.free.syndication.SQLfeeder 
+0

謝謝,有了這個和一些小的調整一切正常。 – blaughli 2012-03-15 21:48:09

+0

@ user1010997是正確的。一個需要-pw。 – 2016-06-17 19:28:25

2

你不需要反引號?

java -classpath `cygpath -u "/cygdrive/c/Projects/common/lib/rome-1.0.jar:/cygdrive 
/c/Projects/common/lib/jdom-1.0.jar:/cygdrive/c/Projects/common/lib/jsoup-1.6.1.jar: 
/cygdrive/c/Projects/common/lib/mysql-connector-java-5.1.18-bin.jar:/cygdrive/c/Projects 
/Freereader/bin/"` com.free.syndication.SQLfeeder 
1
  1. 您必須使用反引號(「` 「符號)或$(CMD)的bash語法時才替換CMD輸出
  2. java的不理解UNIX的(cygwin-)風格的路徑,只有Windows風格。

最後first link in google回答您的問題

5
  • 在bash中,語法$(command)比反引號`command`
  • cygpath更清晰有-p選項轉換路徑 - 像Windows和Unix之間的值(而不是單一路徑名稱),即
    • cygpath -pu 'C:\Users\me\bin;C:\Users\me\project\bin'會給/cygdrive/c/Users/me/bin:/cygdrive/c/Users/me/project/bin
    • cygpath -pw會做同樣以相反的方向

注意cygpath -u "/cygdrive/c"(如你的問題)將不會改變任何東西,因爲該目錄名已經在期望(Unix)語法。你也可以忽略它。

因此,這個命令就變成了:

CP="C:/Projects/common/lib/rome-1.0.jar;C:/Projects/common/lib/jdom-1.0.jar;C:/Projects/common/lib/jsoup-1.6.1.jar; 
C:/Projects/common/lib/mysql-connector-java-5.1.18-bin.jar;C:/Projects 
/Freereader/bin" 
# for a Windows Java binary: 
java -classpath "$(cygpath -pw "$CP")" com.free.syndication.SQLfeeder 
# for a Unix Java binary: 
java -classpath "$(cygpath -pu "$CP")" com.free.syndication.SQLfeeder 

或者,你可以用一個Unix風格的類路徑啓動,但命令保持不變。無論哪種情況,如果類路徑已經處於所需的語法中,您當然可以省略對cygpath的調用。

0

該問題的主要原因不是反而是結腸與分號相關的問題。由於在cygwin中,運行在那裏的java針對的是DOS/Windows環境,它期望';'作爲路徑分隔符。

雖然backtic確實有幫助,但問題的根本原因必須強調':'和';'之間的區別。當Java在Unix或Windows環境中時。