10
votes

NoclassdeffoundError sans aucun nom de classe

J'essaie d'exécuter une tâche Java à partir de la fourmi. J'essaie de courir la classe "org.apache.tools.ant.launch.launcher". Je continue à obtenir le "NoclassDeffondonError" sans aucun nom de classe spécifié. Je reçois aussi une "classe de classeNotFoundException" avec cet affichage d'un message "Impossible de trouver la classe principale :. Le programme va sortir". Voici un extrait de l'erreur xxx

maintenant, j'essaie d'exécuter une classe d'ant à partir d'un pot d'ant et que je spécifie la classe de classe où ce fichier de classe réside à l'aide de l'attribut "ClassePathref", mais je reste toujours Obtenez ce message. J'ai vérifié le pot d'ant pour vérifier le manifeste et la classe "principale" est spécifiée correctement (c'est "org.apache.tools.ant.launch.launcher"). J'ai épuisé toutes mes ressources. S'il vous plaît aider! ! !

PS: mon environnement est Eclipse sur Ubuntu 9.04


0 commentaires

8 Réponses :


0
votes

à partir de cette ligne: xxx

Il semble que votre appel à Java.exe trouve un . où il s'attend à un nom de classe. Peut-être essayez-vous d'indiquer le point de classe sur la ligne de commande, mais négligeez-vous de préférer cela avec le -cp ou -classpath drapeau.


2 commentaires

voici ce que j'ai dans build.xml


@Freder. Peut-être devriez-vous montrer comment WebTest.lib est défini.



1
votes

Cela peut être une erreur trompeuse qui ne concerne pas réellement une classe manquante de la classe de classe. Si vous utilisez Tomcat, il peut être dû à des fichiers conforés manquants en $ catalina_base / conf

Il pourrait également s'agir d'une installation de fourmis mal configurée, veuillez vérifier vos variables Java_Home et Ant_Home env ou essayez une autre installation de fourmi.


0 commentaires

6
votes

Très probablement votre classpath est mal configuré.

Au minimum, le CLASSPATH doit inclure:

  • ant.jar et ant-launcher.jar
  • pots / classes pour votre analyseur XML
  • Jar nécessaire / zip fichiers du JDK

    (à partir de la ant manuel)

    vous semblent également relançant ant dans le répertoire courant (l'exécution de la même build.xml). Peut-être que vous voulez définir la propriété « dir ».


0 commentaires

1
votes

Ant Launcher s'attend à ce que les params suivants

   <java
            classname="org.apache.tools.ant.launch.Launcher"
            fork="true"
            failonerror="true"
            dir="${sub.builddir}"
            timeout="4000000"
            taskname="startAnt"
    >
        <classpath>
            <pathelement location="${ant.home}/lib/ant-launcher.jar"/>
        </classpath>
        <arg value="-buildfile"/>
        <arg file="${sub.buildfile}"/>
        <arg value="-Dthis=this"/>
        <arg value="-Dthat=that"/>
        <arg value="-Dbasedir=${sub.builddir}"/>
        <arg value="-Dthe.other=the.other"/>
        <arg value="${sub.target}"/>
 </java>


0 commentaires

4
votes

On dirait que la tâche des fourmis tente d'exécuter Java, mais passe en quelque sorte une chaîne vide à la JVM comme nom de la classe à exécuter. Je peux obtenir la même stacktrace si j'exécute le jvm directement avec une chaîne vide citée: xxx

(ceci est sous Windows, mais je ne pense pas que cela fait une grande différence.) < / p>

Je ne peux que suggérer la suite du commentaire d'Alexander Pogrebnyak à la réponse d'AKF. Peut-être que la propriété webTest.lib a des espaces entre espaces?

Aussi, est-il une bonne raison pour appeler ant directement via Java, plutôt que d'utiliser le Tâche <<


0 commentaires

0
votes

En cas de doute, invoquez Ant -v et regardez toutes vos déclarations variables et toute votre ligne de commande envoyée à Java.

Certaines quantités de type chemin sont évaluées avec impatience, tandis que d'autres sont évaluées paresseusement. J'ai eu beaucoup de problèmes où j'ai utilisé l'un des premiers, lorsque mon script de fourmis avait l'intention de créer un pot qui serait utilisé par une tâche ultérieure. Puis au moment où j'ai invoqué l'appel, il avait déjà élagué mon pot de la classe de classe.

Si je devais faire une devin sauvage, je parierais que votre ligne de commande a regardé quelque chose comme:

Java ... -ClassPath org.apache.tools.ant.launch.launcher

au lieu de

Java ... -ClassPath foo.jar; bar.jar org.apache.tools.ant.launch.launcher

Comme vous attendez


0 commentaires

3
votes

https://blogs.oracle.com/sreekantth/enterry/java_lang_noclassdeffondantRor_org_codehaus XXX PRE>

Récemment, lorsque j'essaie d'exécuter des scripts maven, je reçois cette exception: P>

Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/plexus/classworlds/launcher/Launcher

Caused by: java.lang.ClassNotFoundException: org.codehaus.plexus.classworlds.launcher.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.codehaus.plexus.classworlds.launcher.Launcher.  Program will exit.


0 commentaires

0
votes

J'ai eu un problème similaire récemment. Les coupables étaient 2 étiquettes sous la tâche Java, qui n'ont pas eu leurs valeurs définies. Ils ont donc entraîné 2 arguments de commande vides et à la fin de 2 espaces de la ligne de commande. Pour une raison quelconque, UNIX ne le gère pas correctement. Red Hat 5 et Ubuntu affichaient la même erreur. C'était OK sur Windows 7. Fixer ces arguments pour avoir des valeurs factices défaillantes résolvées le problème.


0 commentaires