Ant Fehler: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/tools/ant/launch/Launcher
Bin ich auf Fedora 17. Ich bin versucht zu kompilieren-Projekt mit einem ant-build-Datei, die nicht kompatibel mit Java 7. So habe ich beschlossen, installieren Sie OpenJDK 6. JDK 6 ist leider entfernt von yum-Repositorys, und ich dachte, es wäre einfach, um es manuell zu installieren. Ich habe gelernt, dass es keine variable JAVA_HOME und alternativen-system verwendet. Also ich heruntergeladen OpenJDK-Binärdateien (von OSG wenn es darauf ankommt) und installiert java & javac & javaws mit alternatives --install
Befehl. Überprüfung java --version
und javac --version
erwies sich als erfolgreich. Aber die seltsame Sache passiert ist, ist, dass die Ameise funktioniert nicht mehr! Wenn ich ant --execdebug
ich diese Meldung erhalten:
exec "/usr/lib/jvm/openjdk-6.0.24/bin/java" -classpath "/usr/bin/build-classpath:
error: JVM_LIBDIR /usr/lib/jvm-exports/openjdk-6.0.24 does not exist or is not a
directory:/usr/bin/build-classpath: error: JVM_LIBDIR /usr/lib/jvm-exports/openjdk-6.0.24
does not exist or is not a directory:/usr/lib/jvm/openjdk-6.0.24/lib/tools.jar"
-Dant.home="/usr/share/ant" -Dant.library.dir="/usr/share/ant/lib"
org.apache.tools.ant.launch.Launcher -cp ""
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/tools/ant/launch/Launcher
Caused by: java.lang.ClassNotFoundException: org.apache.tools.ant.launch.Launcher
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 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: org.apache.tools.ant.launch.Launcher. Program will exit.
Wie der Fall mit java, es gibt keine variable ANT_HOME zu. Aber es war nicht ein ANT_HOME auch vor der Installation von java 6, während es gut funktioniert. Ant ist installiert unter /usr/bin/ant, das bereits in PATH.
UPDATE: ich weiß es gibt ähnliche Fragen qustion 1, Frage 2. Aber weder mein problem gelöst. Zum Beispiel das hinzufügen von ANT_HOME=/usr/bin verschlechtert sich die situation, in der die Ameise arbeitet nicht selbst mit dem JDK 7! Durch meine mangelnde Vertrautheit mit alternativen system, ich bin völlig entfernt java-bezogene alternativen, JAVA_HOME Hinzugefügt und geändert-PFAD statt. Wieder, java & javac funktionieren, mit der java-version die Rückgabe der rechts-version, aber die Ameise ist wieder der gleiche Fehler. Als die --execdebug
sagt uns, JVM_LIBDIR ist nicht an den richtigen Speicherort verweist. Ich nehme an, dass der Wert in java.conf-Datei, so bin ich einfügen es hier (ich habe installiert, JDK 6 & 7 auf /usr/lib/jvm):
# System-wide Java configuration file -*- sh -*-
#
# JPackage Project <http://www.jpackage.org/>
# Location of jar files on the system
JAVA_LIBDIR=/usr/share/java
# Location of arch-specific jar files on the system
JNI_LIBDIR=/usr/lib64/java
# Location for noarch jar files using arch-specifics jar files
JAVAJNI_LIBDIR=/usr/share/java-jni
# Root of all JVM installations
JVM_ROOT=/usr/lib/jvm
# You can define a system-wide JVM root here if you're not using the
# default one.
#
# If you have the a base JRE package installed
# (e.g. java-1.6.0-openjdk):
#JAVA_HOME=$JVM_ROOT/jre
#
# If you have the a devel JDK package installed
# (e.g. java-1.6.0-openjdk-devel):
#JAVA_HOME=$JVM_ROOT/java-1.7.0-openjdk-1.7.0.9.x86_64
JAVA_HOME=$JVM_ROOT/openjdk-6.0.24
# Options to pass to the java interpreter
JAVACMD_OPTS=
Nur durch die Kommentare und die Kommentarzeichen vor den entsprechenden Zeilen in java.conf, es stellt sich die Ameise ist in Ordnung, mit 7 und schlägt mit 6. wenn ich echo JVM_LIBDIR kurz vor java
Befehl in der ant-shell, die ich erhalten user/share/java
wie gesagt in java.conf. Aber ant --execdebug
zurückgegeben hat etwas seltsames: JVM_LIBDIR /usr/lib/jvm-exports/openjdk-6.0.24
. Was ist das und wie kann ich es beheben?
Wenn Sie nicht sagen könnten, das problem ist hier, was ist die sauberste und sicherste Weg, um die Installation mehrerer Versionen des JDK, das leicht geschaltet werden?
Jede Hilfe ist willkommen.
InformationsquelleAutor Ameer Jewdaki | 2013-02-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihnen fehlen jar im classpath. Stellen Sie sicher, dass alle notwendigen Bibliotheken in das lib-Ordner aus, die Ameise nimmt die Abhängigkeiten.
Überprüfen Sie diese ähnliche Frage.
Ich bin nicht sicher, wie Sie Sie eingerichtet haben, aber ich würde Sie dort lassen, weil Sie verwendet werden, für viel mehr als nur Ihre app.
Danke Kumpel, Wie kann ich den classpath für ant rufen? Wo ist es?
href="http://www.coderanch.com/t/109038/tools/set-classpath-ant" >coderanch.com/t/109038/tools/set-classpath-ant
Nein, Nein, ich wissen, wie man classpath in ein ant-build-Datei. Es scheint mir, dass ant selbst ist eine java-Klasse, die geladen wird, zu verstehen build.xml Datei. Und wie Sie vorgeschlagen, die Klasse wird geladen, mit einem falschen classpath, so dass die main-Klasse nicht gefunden. Also meine Frage ist, wo ist die klassenpfadeinstellung, die zum ausführen von ant?
InformationsquelleAutor
Kann ich nur Antwort auf die Letzte Frage.
VERWENDEN WIR NICHT DEN ALTERNATIVEN-SYSTEM, sondern wir verwalten es manuell.
Was wir tun, sowohl in Ubuntu und CentOS ist, dass wir immer mit der tar.gz von Oracle-JDK-website, extrahieren Sie diese in einen Unterordner in /opt (wie
/opt/jdk_1.7.0_09
), machen ein symbol-link auf den Ordner (wie/opt/default_jdk -> /opt/jdk_1.7.0_09
), und setzen Sie die environment-Variablen, wo wir Punkt JAVA_HOME auf das symbol link, anstatt auf den tatsächlichen Ordner (JAVA_HOME=/opt/default_jdk
).In dieser Weise, wenn wir wollen, zu ändern oder zu aktualisieren, die jdk (z.B. von JDK 7 upadte 9 bis JDK 7 upadte 15), wir laden Sie einfach die tar.gz Paket, extrahieren Sie es in einen anderen Ordner (z.B.
/opt/jdk_1.7.0_15
), löschen Sie das alte symbol link (die Punkte auf/opt/jdk_1.7.0_09
) und erstellen Sie einen neuen Hinweis auf den neuen Ordner (z.B./opt/default_jdk -> /opt/jdk_1.7.0_15
).Gleiche Weise funktioniert mit 32 und 64 bit jdks, verschiedene Versionen von Ant, Maven, Gradle, etc.
Was meinst du mit "Wechsel der Java-version"? In unserem täglichen Sprachgebrauch, es bedeutet "verwenden Sie eine andere version von JDK". Und das einzige, was wir setzen in unseren Systemen über JDK ist
JAVA_HOME
und hinzufügen$JAVA_HOME/bin
WEG. Wir verwenden niemals die Linux-distribution alternative system, wie wir es immer verwenden Sie die Oracle JDK und bleiben mit Ihren tar.gz Paket.Wann immer Sie wollen wechseln zwischen den Versionen müssen Sie schalten Sie alle jene symbolische links zwischen tatsächlichen und symbolischen jar, java, javac, javaw, javadoc, etc.. Wenn ich Recht habe, es ist nicht eine gute Art, nehme ich an.
Was wir getan haben, ist nur ein symbol-link auf die jdk-Ordner, und zeigen Sie JAVA_HOME auf das symbol link statt der tatsächlichen Ordner. Wir haben NIE erstellen von symbol-links für AUSFÜHRBARE DATEIEN.
Sogar, wenn Sie wollen, um einige symbol links in Orten wie
/usr/bin
um bestimmte ausführbare Dateien in SSH (SSH nicht Lesen~/.profile
), die Sie gerade zeigen Sie das symbol Verknüpfung zum Pfad wie/opt/default_jdk/bin/java
-- beim wechseln zwischen den verschiedenen Versionen, die Sie nur noch löschen müssen, um diedefault_jdk
symbol link und erstellen Sie eine neue. Keine Sorge, das system ist intelligent genug, um zu Folgen, die mehrere Ebenen des symbol-links.InformationsquelleAutor coolcfan
Sieht aus wie, etwas ist falsch mit Ihrer Java-installation. Finden Sie diese http://www.linuxforums.org/forum/red-hat-fedora-linux/151698-problems-tomcat.html mit einem ähnlichen Problem wurde später aber behoben.
InformationsquelleAutor Navin Mishra