2012-03-13 23 views
14

Estoy tratando de escribir un script BASH para ejecutar mi programa Java (problema común, ¿no?). Simplemente no puedo hacer que funcione. Después de muchos cambios, así es como estoy tratando de establecer la ruta de clases y luego ejecutar el programa:Cómo ejecutar Java desde 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 

sentimos el revoltijo, sólo estoy tratando de hacer todo a la vez. Me dice que la clase principal de mi programa no se puede encontrar! ((

¿Alguna idea?

+0

¿Has probado '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/"'' para asegurarse de que hace las rutas correctas? – TheLQ

+0

¿No sería mucho más fácil si agrega esos frascos directamente a tu ruta de clases en lugar de escribirlos todos, o ¿no puedes hacer eso en tu caso? –

+0

Preguntas frecuentes sobre Java y Cygwin: http://www.inonit.com/cygwin/faq/ - Da una buena Explicación cuándo y cómo convertir classpaths entre Cygwin y Windows 'Java –

Respuesta

11
  • Java utiliza la ruta de clase y coma como separador de token.
  • Use acentos abiertos en lugar de comillas simples

Probar:

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

Gracias, con esto y algunos pequeños ajustes todo funciona. – blaughli

+0

@ user1010997 tiene razón. Uno necesita -pw. –

2

¿Usted no necesita acentos abiertos?

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. Debe utilizar comillas sencillas ('` 'símbolo) o sytax $ (cmd) bash para sustituir la producción cmd
  2. java no entienden unix (cygwin-) caminos estilo, solamente ventanas de estilo.

y al fin first link in google respuestas cuestionas

5
  • En bash, la sintaxis $(command) es más claro que los acentos abiertos `command`
  • cygpath tiene una opción para convertir -p Path- valores similares (a diferencia de los nombres de ruta única) entre Windows y Unix, es decir,
    • 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 hará lo mismo en la dirección opuesta

Tenga en cuenta que cygpath -u "/cygdrive/c" (como en su pregunta) no va a cambiar nada, ya que el nombre del directorio ya está en el deseado (Unix) sintaxis Podrías omitirlo igual de bien.

Por lo tanto, el comando se convierte en:

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 

Alternativamente, se puede comenzar con una ruta de clase al estilo Unix, pero los comandos siguen siendo los mismos. En cualquier caso, puede, por supuesto, omitir la llamada a cygpath si la ruta de clase ya tiene la sintaxis deseada.

0

La causa principal del problema NO es la lombriz sino el problema del colon versus el punto y coma. Como en cygwin, la java que se ejecuta allí es para entornos DOS/Windows, está esperando ';' como el separador de ruta.

Mientras Backtic ayuda, la principal causa del problema debe ser enfatizar la diferencia entre ':' y ';' cuando Java está en Unix o en el entorno de Windows.