2012-03-13 16 views
14

Sto provando a scrivere uno script BASH per far funzionare il mio programma Java (problema comune, giusto?). Non riesco proprio a farlo funzionare. Dopo molte modifiche, ecco come sto cercando di impostare il percorso di classe e quindi eseguire il programma:Come eseguire Java da Cygwin

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 

dispiace il guazzabuglio, sto solo cercando di fare tutto in una volta. Mi dice che la classe principale del mio programma non può essere trovata! ((

Tutte le idee?

+0

Hai provato '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/Progetti/comune/lib /mysql-connector-java-5.1.1-bin.jar:/cygdrive/c/Projects /Freereader/bin/"'' per assicurarsi che faccia i percorsi corretti? – TheLQ

+0

Non sarebbe molto più facile se tu aggiungi quei vasi direttamente al tuo classpath invece di digitarli tutti in? o, non puoi farlo nel tuo caso? –

+0

Domande frequenti su Java e Cygwin: http://www.inonit.com/cygwin/faq/ - Gives una bella spiegazione quando e come convertire i percorsi di classe tra Cygwin e Windows 'Java –

risposta

11
  • Java classpath usa il punto e virgola come separatore token.
  • Uso backticks invece di virgolette singole

Prova:

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

Grazie, con questo e alcune piccole regolazioni tutto funziona – blaughli

+0

@ user1010997 ha ragione. Uno ha bisogno di -pw. –

2

Non è necessario backticks?

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. È necessario utilizzare apici inversi ('` 'simbolo) o $ (cmd) bash sytax per sostituire l'uscita cmd
  2. java non capiscono Unix (cygwin-) percorsi di stile, solo Windows-style.

E alla fine first link in google risposte si mette in discussione

5
  • In bash, la sintassi $(command) è più chiaro che le backticks `command`
  • cygpath ha un'opzione per convertire -p percorso- valori simili (al contrario dei nomi di percorso singoli) tra Windows e Unix, ovvero
    • cygpath -pu 'C:\Users\me\bin;C:\Users\me\project\bin' darà /cygdrive/c/Users/me/bin:/cygdrive/c/Users/me/project/bin
    • cygpath -pw farà lo stesso nella direzione opposta

noti che cygpath -u "/cygdrive/c" (come nella tua domanda) non cambierà nulla, dal momento che il nome della directory è già presente nella desiderata (Unix) sintassi. Potresti ometterlo altrettanto bene.

Così, il comando diventa:

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 

In alternativa, si può iniziare con un percorso di classe in stile Unix, ma i comandi rimangono le stesse. In entrambi i casi, puoi ovviamente omettere la chiamata a cygpath se il percorso della classe è già nella sintassi desiderata.

0

La causa principale del problema NON è il rovescio ma il problema del colon contro il punto e virgola. Dato che in cygwin, java che gira lì è per ambiente DOS/Windows che si aspetta ';' come separatore del percorso.

Mentre backtic aiuta, la causa principale del problema principale deve essere sottolineare la differenza tra ':' e ';' quando Java è in Unix o in ambiente Windows.

Problemi correlati