2009-06-03 7 views
1

J'ai un problème lors du chargement de mon fichier jar lors de l'exécution. Mon hotel.jar est chargé et une méthode de celui-ci (makeReservation) est invoqué en utilisant le code suivant:Problème lors du chargement d'un fichier jar qui dépend d'un autre fichier jar

File file = new File("c:/ComponentFiles/hotel.jar"); 
URL jarfile = new URL("jar", "", "file:" + file.getAbsolutePath() + "!/"); 
URLClassLoader cl = URLClassLoader.newInstance(new URL[]{jarfile}); 
Class componentClass = cl.loadClass("HotelPackage.HotelMgt"); 
Object componentObject = componentClass.newInstance(); 
Method setMethod = componentClass.getDeclaredMethod("makeReservation", null); 
setMethod.invoke(componentObject, null); 

Le problème est dans la HotelPackage.HotelMgt de classe de mon fichier jar, j'ai une variable de classe d'un autre class (HotelPackage.Hotel) qui se trouve dans un autre fichier jar. J'ai essayé d'ouvrir et de charger l'autre fichier jar avec le même code que ci-dessus mais je reçois l'exception qui ne peut pas trouver la définition de la classe .: Exception dans le thread « principal » java.lang.NoClassDefFoundError: BeanPackage/Hôtel

quelle est la solution?

Répondre

1

Vous pouvez spécifier des dépendances entre les fichiers JAR en définissant la propriété Class-Path dans les fichiers manifest des fichiers JAR. Ensuite, la machine virtuelle Java chargera automatiquement les fichiers JAR de dépendance selon les besoins.

Plus d'informations ici: http://java.sun.com/docs/books/tutorial/deployment/jar/downman.html

1

Merci, mais je l'ai trouvé une autre solution qui fonctionne vraiment. Comme je connais la totalité des séries de composants qui vont fonctionner les unes avec les autres, je les charge toutes avec une instance de chargeur de classe (tableau d'URL). alors le classloader gère lui-même les dépendances.

+0

Dans ce cas peut-être que vous souhaitez mettre tous les pots dans un pot de maître - alors peut-être que ce projet est intéressant pour vous: http://one-jar.sourceforge.net/ – FunThomas424242

Questions connexes