NoClassDefFoundError avec l'Exécutable Jar
Probablement une habitude problème avec exec jar. Je suis en train de créer et d'exécuter un fichier exécutable jar et sa me rend fou.
J'ai un couple de classes(avec package stmts), dont l'un a une méthode main, un simple constructeur vide et bien sûr quelques biz méthodes, elles font partie d'un petit projet eclipse.
Je suis le regroupement de ces deux et un fichier manifeste dans un pot(arc.jar) à l'aide d'un build.xml. Mon programme utilise jdom bibliothèque et également des références à partir d'un de mes autres projets eclipse, je suis donc y compris les deux jdom agence canadienne de développement international et d'autres biz bibliothèque lors de la construction de ma arc.jar.
C'est le Manifeste.MF que j'ai écrit, il y a un nouveau lineafter Principal de la Classe
Manifest-Version: 1.2
Class-Path: jdom.jar other.jar
Main-class: uk.co.Art
Quand je décompressez ce arc.jar il contient jdom.jar, other.jar, META-INF/Manifest.mf et le colis avec mes classes.
Curieusement, le fichier Manifeste dans le bocal ressemble à ceci -
Manifest-Version: 1.2
Created-By: 14.2-b01 (Sun Microsystems Inc.)
Main-class: uk.co.Art
Class-Path: jdom.jar other.jar
J'ai eu ClassNotFoundException ClassNotFoundException: uk.co.Art
lorsque la valeur de la classe Principale était sans forfait. Avec le paquet de l'erreur changé à ClassNotFoundException: org.jdom.JDOMException
.
Donc, juste pour le test de fin, j'ai essayé de donner le fullpaths avec c:\
pour mon exécution de la classe et les pots, mais encore il n'est pas capable de localiser la classe principale, une erreur se produit au ClassNotFoundException: uk.co.Art
.
Je ne peux pas l'air de comprendre pourquoi.
La ligne de commande que j'utilise est - java -jar Arc.jar
La version sur invite de cmd est -
java version "1.6.0_16"
Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) Client VM (build 14.2-b01, mixed mode)
même si l'eclipse installé jre est re6
Que pouvez-vous proposer ?
Alex solution ne résoudra pas le problème pour l'exécution locale.
Je pense également à un autre moyen(comme une option supplémentaire) d'exécution, de déployer la Arc.jar sur le serveur et d'exécuter un lot sur cette machine qui, fondamentalement, définit le chemin de classe java, puis appelle le pot ou directement la classe selon la façon dont il fonctionne.But its only an option, not a preferred one though.
Ou, également, de définir cette classe dans mon manifeste et construire pot localement et de les déployer sur le serveur.
Aimeriez essayer quelques choses de bien.But now I understand that the basic problem was jars into jar and hence classpath issue.
Merci beaucoup les gens.
- pouvez-vous nous donner la structure de répertoire du pot? et le code de la classe
- Voir stackoverflow.com/questions/2169188/...
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas à emballer vos bocaux dans votre bocal. Ces bocaux doivent être dans le même répertoire que votre application jar. En d'autres termes: mettre les bocaux dans un répertoire et de les exécuter. Tout va fonctionner.
Raisons: pense que ce n'est exécutable jar veux dire. Si vous jar n'est pas "exécutable" de l'exécuter de la manière suivante:
lors de votre bocal est exécutable que vous utilisez la ligne de commande suivante:
Pas de magie: la jvm s'ouvre manifeste et prend le nom de la classe principale et d'autres pots à partir de là et presque crée de la ligne de commande comme la première. Maintenant, vous comprenez que tous les pots dans votre cas doit être dans le même répertoire.
Vous ne pouvez pas regrouper les JAR dans un BOCAL. Ils doivent aller dans le même dossier ou au moins dans un dossier relatif à la
Arc.jar
. Vous spécifiez ensuite son chemin relatif dans laClass-Path
entrée.Eclipse a cependant un utile outil d'exportation qui permet d'intégrer le contenu d'autres JAR dans votre BOCAL de sorte que vous ne finissent pas avec de multiples lâche JAR qui sont nécessaires pour être placé dans un emplacement spécifique. De vérifier la 2ème Bibliothèque de Manipulation option lorsque vous choisissez Export > Runnable JAR file.
Lors du choix d' Package de bibliothèques requises en JAR généré, puis Eclipse va ajouter un chargeur de classe qui va charger ces BOCAL de façon transparente pour vous avant l'exécution de la classe principale. Il le fait avec l'aide de
JarRsrcLoader
.Peut-être l' .jar est corrompu, comme parfois il m'est arrivé. Jetez un oeil à cette.
Juste quelques choses à noter lors de l'exportation.
JRE associés pour le projet est compatible avec le JRE qui serait utilisée pour l'exécuter.
Veuillez exporter votre projet dans un disque local, puis de le déplacer dans n'importe quel lecteur partagé (cela a réglé mon problème).
Merci.