2010-05-19 8 views
6

Ich bin ein .NET-Entwickler, aber für mein aktuelles Projekt brauche ich Google Caja, ein Java-Projekt. Oh, oh!Kann Java-Programm nicht ausführen! NoClassDefFoundError?

Ich habe die Anleitung unter http://code.google.com/p/google-caja/wiki/RunningCaja auf meinem Windows-Rechner gefolgt, kann aber nicht das Programm ausführen. Die Befehlszeile schlagen sie vor, funktionierte nicht, so cd'd ich in die Ameisen Gläser Verzeichnis und versucht plugin.jar auszuführen:

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 

Was ist denn das?

Ich habe auch versucht, Datei: /// d: /java/caja/svn-changes/pristine/ant-jars/test.htm anstelle von test.htm. Mit Blick auf die Quelle, so scheint es, die Datei param ein Uri ist ...

Ich habe auch versucht IKVM auf pluginc läuft und dann nicht über Java beunruhigend, aber das kam mit dem ClassDefNotFoundException zu hoch ...

danke!

bearbeiten: Danke an alle für die Hilfe bis jetzt :) immer noch fest. bitte beharr mich bei mir, dies könnte der Anfang eines .net-Entwicklers sein, der zu schönen OSS-Technologien wechselt!

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 

Gibt es irgendeine Weise, die ich es den Code in der Datei build.xml gegeben laufen zu bekommen?

Antwort

10

Java versucht, die org.apache.commons.cli.ParseException Klasse zu laden, aber es kann ihn nicht finden. Dies deutet darauf hin, dass Sie den Klassenpfad nicht richtig festlegen.

Diese bestimmte Klasse stammt aus der Apache Commons CLI-Bibliothek, also suchen Sie nach einem Jar namens cli.jar oder commons-cli.jar. Es kann in einem separaten Verzeichnis lib sein. Wenn sich am selben Ort noch weitere Gläser befinden, müssen Sie diese wahrscheinlich ebenfalls hinzufügen.

Edit: an der build.xml Datei suchen, verwendet es die folgenden Classpath:

<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>

So müssen Sie alle diese Gläser in den cp Argument enthalten, wenn Java-Aufruf.

Edit # 2: Wie Ash wies darauf hin, Sie nicht -cp mit -jar verwenden können, so dass Sie auch die pluginc.jar auf dem Classpath setzen müssen und werden manuell die Hauptklasse angeben (so java -cp ...;pluginc.jar com.google.classname -i etc). Es wäre wahrscheinlich einfacher, ant am arbeiten als das alles manuell zu tun;)

+0

running ant ist ok um alles zu kompilieren. kann ich das ant-Skript verwenden, um com.google.caja.plugin.PluginCompilerMain.main auszuführen? – mcintyre321

+1

+1 Schöne Zusammenfassung der Probleme hier – Ash

+0

@ mcintyre321 - wenn Sie ameise arbeiten, dann sollte 'ant Gläser' alle Gläser in einem Verzeichnis für Sie ausgeben. Sie können dann '-cp dir/*' verwenden, um sie alle einzuschließen (wobei 'dir' das Verzeichnis ist, in das sie eingefügt werden), was die Dinge ziemlich vereinfachen wird. – Chris

0

Versuchen Sie, diese

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

Ich denke nicht, ich% Classpath% haben - alle docs ich lesen, während diese auf Einstellung vorgeschlagen, dass es Probleme, eine erstellen verursacht? – mcintyre321

+1

Dies wird nicht funktionieren; Die Option '-classpath' wird ignoriert, wenn Sie die Option '-jar' verwenden, wie Ash erklärt. – Jesper

+0

Legen Sie den Klassenpfad im Manifest Ihres Jars mithilfe des Attributs "Class-Path:" fest. Syntax wird Class-Path sein: [jar 1] [jar 2] ... –

Verwandte Themen