2012-03-13 3 views
3

J'ai ce pot:Classe introuvable malgré classpath dans MANIFESTE

/mybundle.jar/ 
    de/mybundle/myclass.class 
    lib/mysql.jar 
    META-INF/MANIFEST.MF 

avec ce qui suit MANIFEST.MF

Manifest-Version: 1.0 
Class-Path: lib/mysql.jar 
Main-Class: de.mybundle.myclass 

Tout semble parfaitement correct pour moi, mais quand je lance

java -jar mybundle.jar 

Je reçois une exception NoClassDefFoundException lorsque la classe essaie d'instancier l'une des classes MySQL-Library.

Qu'est-ce que j'ai fait de mal?

+0

Avez-vous un fichier mysql.jar dans votre fichier JAR principal? –

Répondre

1

Vous ne pouvez pas regrouper les fichiers JAR dans d'autres fichiers JAR. Les chemins spécifiés dans le manifeste sont relatifs à l'emplacement du fichier jar que vous appelez, donc dans votre cas par rapport à l'emplacement mybundle.jar.

Vous avez deux options:

  1. Ou mettre le pot MySQL dans le répertoire lib en dehors de votre mybundle.jar.
  2. Créez un gros pot, qui contient toutes les classes des fichiers jar requis en plus de vos propres classes. Ceci est disponible à partir de Eclipse ou Maven.
+0

Bien sûr ... J'ai lu ça littéralement il y a une semaine et je me suis dit "hé, souviens-toi que tu construis des pots la semaine prochaine!" .. d'euh! Merci! –

0

Si votre fichier mybundle.jar est dans c:/foo, alors votre fichier mysql.jar se trouve dans c:/foo/lib. Le chemin de classe dans le manifeste est relatif à l'exécutable JAR de la façon dont vous l'avez écrit.

Questions connexes