2011-09-24 10 views
9

Actualmente estoy ejecutando Solr fuera de un contenedor Jetty con el que se envía. Se ejecuta correctamente cuando se ejecuta desde la línea de comandos a través de:Jetty Classpath issues

java -jar start.jar 

cuando estoy en el mismo directorio que start.jar. Lamentablemente, necesito poder lanzar embarcadero desde cualquier directorio, no solo el que contiene start.jar. He intentado muchas opciones, tales como:

java -Dsolr.solr.home=~/solr/ -Djetty.home=~/solr/ -Djetty.logs=~/solr/logs/ -cp ~/solr/start.jar:~/solr/lib/jetty-util-6.1.26-patched-JETTY-1340.jar:~/solr/lib/jetty-6.1.26-patched-JETTY-1340.jar:~/solr/lib/servlet-api-2.5-20081211.jar -jar ~/solr/start.jar ~/solr/etc/jetty.xml 

Cada vez que tengo este trazado inverso:

java.lang.ClassNotFoundException: org.mortbay.xml.XmlConfiguration 
at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
at org.mortbay.start.Main.invokeMain(Main.java:179) 
at org.mortbay.start.Main.start(Main.java:534) 
at org.mortbay.start.Main.start(Main.java:441) 
at org.mortbay.start.Main.main(Main.java:119) 

Respuesta

5

Tenga en cuenta que cuando se ejecuta

java ... -cp ~/solr/start.jar:... -jar ~/solr/start.jar ~/solr/etc/jetty.xml 

la opción -cp se ignora, ya que use la opción -jar.

De man java:

-jar

Cuando se utiliza esta opción, el archivo JAR es la fuente de todos los usuarios clases, y otros valores de ruta de clase de usuario se ignoran.

tiene dos opciones:

  • seguir usando la opción -jar, pero entonces es necesario proporcionar la ruta de clase en el archivo de manifiesto jar (tenga en cuenta que estas entradas de ruta de clases no pueden ser relativa a la ruta actual, solo en relación con el archivo jar que está ejecutando)
  • Omita la opción -jar y proporcione la clase principal explícitamente.
0

Está utilizando el ~ como un acceso directo al directorio de inicio del usuario actual. Reemplazaría todos los caracteres de tilde con una ruta absoluta y vería si eso ayuda.

+1

Eso ya lo ha hecho bash antes de la ejecución. Prueba 'echo hello ~' y ya verás. – aioobe

+0

No asumía que siempre estuviese ejecutando desde bash. Ubuntu ocasionalmente hizo (¿hace?) Cosas raras con opciones predeterminadas de shell (* dash * vs * bash *, ¿alguien?), Y he tenido problemas de expansión de tilde en el pasado. – Femi

+0

Lo mismo para todos los caparazones compatibles. Lea sobre la expansión de tilde en su manual favorito. – aioobe

7

Simplemente cambiando al directorio correcto antes de llamar a Java ... solucionado el problema para mí.

+0

Tuve el mismo problema e intenté ejecutarlo de todos modos :). ¡Esto lo resolvió! Gracias. – despot

0

Me encontré con esto en enero de 2014. Mi problema fue que porque ejecuté una configuración de Cluster Zookeeper desde otro lugar, la carpeta $ SOLR_HOME/lib se movió en $ SOLR_HOME/scripts en la nube donde existe zkCli.bat. Copia el la carpeta lib vuelve a $ SOLR_HOME/y funciona ahora.