2010-05-19 13 views
6

Soy desarrollador de .NET, pero para mi proyecto actual necesito usar Google Caja, un proyecto de Java. ¡UH oh!¡No se puede ejecutar el programa java! ¿No Error Clase Def Encontrado?

He seguido la guía en http://code.google.com/p/google-caja/wiki/RunningCaja en mi máquina de Windows, pero no puedo ejecutar el programa. La línea de comandos que sugieren que no funcionó, así que cd'd en el directorio hormigueros frascos y trató de correr plugin.jar:

D:\java\caja\svn-changes\pristine\ant-jars>java -cp . -jar pluginc.jar -i test.htm 
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/cli/ParseException 
     at com.google.caja.plugin.PluginCompilerMain.<init>(PluginCompilerMain.java:78) 
     at com.google.caja.plugin.PluginCompilerMain.main(PluginCompilerMain.java:368) 
Caused by: java.lang.ClassNotFoundException: org.apache.commons.cli.ParseException 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
     ... 2 more 

Cuál es todo eso?

También he intentado con file: /// d: /java/caja/svn-changes/pristine/ant-jars/test.htm en lugar de test.htm. En cuanto a la fuente, parece que el archivo es un parámetro Uri ...

También he intentado correr IKVM en pluginc y luego no tener que preocuparse acerca de Java, pero que se le ocurrió la ClassDefNotFoundException también ...

gracias!

editar: gracias a todos por la ayuda hasta el momento :) todavía está atascado. ¡Por favor, perseveren conmigo, este podría ser el comienzo de un desarrollador de .net que se cambia a las tecnologías OSS!

d:\java\caja\svn-changes\pristine\ant-jars>java -cp .\*.* com.google.caja.plugin.PluginCompilerMain 
=> NoClassDefFoundError: /\commons-cli/jar 

D:\java\caja\svn-changes\pristine\ant-jars>java -cp .\*.*;..\third_party\java\jakarta_commons\*.* com.google.caja.plugin.PluginCompilerMain 
=> Could not find the main class: com.google.caja.plugin.PluginCompilerMain 

¿Hay alguna forma de que pueda ejecutarlo dado el código en el archivo build.xml?

Respuesta

10

Java de intentar cargar la clase org.apache.commons.cli.ParseException, pero no lo encuentra. Esto sugiere que no está configurando el classpath correctamente.

Esa clase en particular proviene de la biblioteca CLI de Apache Commons, así que busque un archivo llamado cli.jar o commons-cli.jar. Puede estar en un directorio separado lib. Si hay otros frascos en el mismo lugar, probablemente también deba agregarlos.

Editar: mirando el archivo build.xml, se utiliza la siguiente ruta de clases:

<path id="classpath.web"> 
    <pathelement path="${third_party}/java/jsdk2.1/servlet.jar"/> 
    <pathelement path="${third_party}/java/jaf/activation.jar"/> 
    <pathelement path="${third_party}/java/javamail/mail.jar"/> 
    <pathelement path="${third_party}/java/jetty/lib/jetty.jar"/> 
    <pathelement path="${third_party}/java/jetty/lib/jetty-util.jar"/> 
    </path> 
    <path id="classpath.compile"> 
    <path refid="classpath.web"/> 
    <pathelement path="${third_party}/java/jakarta_commons/commons-cli.jar"/> 
    <pathelement path="${third_party}/java/json_simple/json_simple.jar"/> 
    <pathelement path="${third_party}/java/rhino/js.jar"/> 
    <pathelement path="${third_party}/java/xerces/xercesImpl.jar"/> 
    <pathelement path="${jars}/htmlparser.jar"/> 
    </path> 
    <path id="classpath.run"> 
    <pathelement path="${lib}"/> 
    <path refid="classpath.compile"/> 
    </path>

Por lo que tendrá que incluir todos esos frascos en el argumento cp al llamar java.

Edición # 2: Cuando Ash señaló, no se puede utilizar con -cp-jar, por lo que tendrá que poner el pluginc.jar en la ruta de clase, así como manualmente especificar la clase principal (por lo java -cp ...;pluginc.jar com.google.classname -i etc). Probablemente sería más fácil ponerse a trabajar que hacer todo esto manualmente;)

+0

running ant está bien para compilar todo. ¿Puedo usar el script ant para ejecutar com.google.caja.plugin.PluginCompilerMain.main? – mcintyre321

+1

+1 Buen resumen de los problemas aquí – Ash

+0

@ mcintyre321 - si tienes una hormiga trabajando, entonces 'ant jarras' debería volcar todas las jarras en un directorio para ti. A continuación, puede usar '-cp dir/*' para incluirlos a todos (donde 'dir' es el directorio en el que los ponga), lo que simplificará bastante las cosas. – Chris

0

probar este

java -classpath .;%classpath%; -jar pluginc.jar -i test.htm 
+0

No creo que tenga un% classpath% - ¿Todos los documentos que leí durante la configuración sugirieron que causa problemas para configurar uno? – mcintyre321

+1

Esto no va a funcionar; la opción '-classpath' se ignora cuando se usa la opción' -jar', como explicó Ash. – Jesper

+0

Establezca classpath en el manifiesto de su jar usando Class-Path: attribute. La sintaxis será Class-Path: [jar 1] [jar 2] ... –

6

También tenga en cuenta que cuando utiliza la opción -jar, todas las demás configuraciones de CLASSPATH se ignoran. Ver http://java.sun.com/javase/6/docs/technotes/tools/windows/java.html:

Cuando se utiliza esta opción, el archivo JAR es la fuente de todas las clases de usuarios, y otros valores de ruta de clase de usuario se pasan por alto.

Cuestiones relacionadas