J'ai installé Ant sur une machine Fedora 5 en utilisant yum, mais Ant ne se lance pas. Je reçois ce message d'erreur:
[bash]# ant
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: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)
Could not find the main class: org.Apache.tools.ant.launch.Launcher. Program will exit.
J'ai défini les variables d'environnement suivantes:
Java_HOME = /usr/Java/latest
ANT_HOME = /usr/bin
Ant est installé à /usr/bin/ant
.
J'ai aussi rencontré ce post , et il semble que la variable JAVAVER_LIBDIR
ne pointe pas vers quelque chose qui existe. Je mets un lien symbolique, comme le suggère le message, éclaircit le problème pour l'auteur, mais cela ne règle pas le problème.
[bash]# Sudo ln -s /usr/share/Java /usr/share/Java-1.6.0
Edit: J'ai également défini un lien symbolique qui résolvait un problème similaire avec la variable JAVAVER_JNIDIR
:
[bash]# Sudo ln -s /usr/lib/Java /usr/lib/Java-1.6.0
Je reçois maintenant un message d'erreur différent:
[bash]# ant --execdebug
/usr/bin/build-classpath: error: Could not find jaxp_parser_impl Java extension for this JVM
/usr/bin/build-classpath: error: Could not find xml-commons-apis Java extension for this JVM
/usr/bin/build-classpath: error: Some specified jars were not found
exec "/usr/Java/latest/bin/Java" -classpath "/usr/share/Java-1.6.0/ant.jar:/usr/share/Java-1.6.0/ant-launcher.jar:/usr/Java/latest/lib/tools.jar" -Dant.home="/usr" -Dant.library.dir="/usr/lib" org.Apache.tools.ant.launch.Launcher -cp ""
Buildfile: build.xml does not exist!
Build failed
Off à Google ces messages d'erreur ...
Je viens de rencontrer un problème similaire sur Fedora 18.
Pour faire la longue histoire courte, exécutez:
Sudo mkdir /usr/lib/Java-1.7.0 /usr/share/Java-1.7.0
Apparemment, ce problème est spécifique à Java-1.7.0-openjdk
car des répertoires empty similaires pour toutes les autres versions de JDK existaient.
DÉTAILS
Une erreur d'une seule ligne s'est produite après l'exécution de ant
:
Error: Could not find or load main class org.Apache.tools.ant.launch.Launcher
Le problème se trouvait quelque part dans le script /usr/share/Java-utils/Java-functions
qui tentait de définir les variables JAVAVER_JNIDIR
/JAVAVER_LIBDIR
pour faire référence aux répertoires ci-dessus. En raison d'une redirection inappropriée du message d'erreur vers stdout, certaines variables ont reçu des affectations telles que:
LOCALCLASSPATH='/usr/bin/build-classpath: error: JAVAVER_JNIDIR /usr/lib/Java-1.7.0 does not exist or is not a directory'
La création des répertoires conformément à la convention définie par toutes les autres versions de Java est la solution la plus propre.
Sudo mkdir /usr/lib/Java-1.7.0 /usr/share/Java-1.7.0
J'ai installé Sun Java 1.7.x en téléchargeant le fichier tar et en le plaçant dans/opt. Parce que je n'ai pas fait une installation yum, ces répertoires n'ont pas été créés. Mon Java_HOME est défini sur:
$ echo $Java_HOME/
/opt/jdk1.7.0_03/
Comme quelqu'un d'autre l'a dit, exécuter ce qui suit a fourni un débogage très utile:
ant --execdebug
Je pense que ANT_HOME devrait être défini avec '/ usr/bin/ant'. J'ai cette configuration (CENTOS 5).
Mon script sh sous '/etc/profile.d' a cette conf .:
export Java_HOME="/usr/local/Java";
export ANT_HOME="/usr/local/ant";
J'espère que ça t'aide.
J'ai eu un problème similaire mais ce qui suit l'a résolu pour moi:
Sudo yum install xml-commons-apis
J'ai eu le même message d'erreur aujourd'hui, mais déclenché par une cause différente.
Dans mon cas, après avoir mis à jour OpenJDK 1.8.0, je ne pouvais plus exécuter ant.
Le problème résidait dans le fait que le résultat de la commande Java -fullversion
avait légèrement changé et que le /usr/share/Java-utils/Java-functions
ne le comprenait plus correctement.
La mise à niveau vers la dernière version du __PMjpackage-utils
l'a résolu pour moi.
J'ai eu un tel problème sur Fedora 16 mais dans mon cas, les paquets xerces
et xml-commons-apis
étaient ok. En fait, --execdebug
est très utile et indique que ant ne peut pas trouver un répertoire à /usr/lib/jvm-exports/YOUR_JDK
. Cela est dû au fait que je suis passé d’Openjdk à Oracle jdk et que le répertoire de l’ancienne version de jdk (/usr/lib/jvm-exports/Java-1.6.0-openjdk-1.6.0.0
) y est resté, mais il n’y avait pas celui de ma version actuelle (/usr/lib/jvm-exports/jdk1.6.0_32
). Ces répertoires n'incluent que des liens symboliques qui pointent vers des bocaux de jre en particulier. J'ai donc suivi les étapes suivantes:
jdk1.6.0_32
)# cp -av Java-1.6.0-openjdk-1.6.0.0.x86_64/* jdk1.6.0_32/
# cd /usr/lib/jvm-exports/jdk1.6.0_32
# ln -s -f $Java_HOME/jre/lib/rt.jar jaas-1.6.0.0.jar
De toute évidence, $Java_HOME
est défini correctement (sur la nouvelle version de jdk) . Il a résolu mon problème et peut constituer une autre cause, à l’exception des causes susmentionnées.
Essayez d'installer xerces-j2-xml-apis
Dans mon cas, je définissais ma variable ANT_HOME
, mais j'avais /bin/
ajouté pour pouvoir être utilisé dans le chemin système - cette variable de base ne devrait pas être le répertoire binaire, utilisez ce qui suit pour définir un antime, et ajouter le répertoire binaire au chemin env. .
export ANT_HOME=/opt/Apache-ant-1.9.4
export PATH=$ANT_HOME/bin:$PATH
J'avais exactement le même message d'erreur sous OS X, mais quelqu'un a suggéré de désactiver ANT_HOME et cela a fonctionné. https://github.com/Homebrew/homebrew/issues/32851
J'ai eu le même problème sur Suse, SLES 11. La réponse de Hidayath https://stackoverflow.com/a/4849302/1211900 l'a résolu. Supposant des référentiels de paquets prêts à l'emploi: me @ sles: ~> Sudo zypper installer xerces-j2-xml-apis
Dans mon cas, le dossier 'lib
' contenant tous les fichiers jar, y compris
ant-launcher.jar
était sous
/usr/local/Cellar/ant/1.9.6/libexec/
J'ai copié le dossier lib sous
/usr/local/Cellar/ant/1.9.6/
parce qu'après avoir exécuté 'ant --execdebug', j'ai trouvé que les commandes ant recherchaient le dossier 'lib' sous le dossier '1.9.6'.
après ce changement, les commandes de fourmis ont commencé à bien fonctionner.