2010-08-12 4 views
0

J'ai créé mon application dans Netbeans 6.8. L'application contient diverses références à des produits tiers (tels que le pilote de base de données Microsoft pour SQL Server et JIDE).Déploiement d'une application Java compilée avec Netbeans - Impossible de trouver une classe tierce

Une fois compilé, il produit un dossier dist que je pensais pouvoir simplement xcopier vers un emplacement et cela fonctionnerait.

Lorsque j'exécute mon application, dès qu'elle rencontre une référence dans un formulaire pour les classes JIDE, l'application signale une erreur et quitte.

Essentiellement, la trace de la pile est:

java.lang.reflect.InvocationTargetException
Caused by: java.lang.ClassNotFoundException: com.jidesoft.gantt.PeriodBackgroundPainter at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source)

Je les fichiers JAR copiés dans le dossier lib dans le dossier où mon fichier jar est.
\ MyApp \ MyJar.jar
\ MyApp \ lib \ tous les pots d'application

Cependant, quand je copier le contenu du dossier lib à C: \ Program Files \ Java \ jre6 \ lib \ ext puis tout fonctionne bien.

Ai-je raté quelque chose? Je cours sur Vista SP2.

J'ai construit un nouveau projet simple avec la même référence aux composants JIDE et l'ai compilé. Lorsque j'exécute le fichier jar, l'application s'exécute et affiche les composants. La seule différence visible que je peux voir entre les projets est la dénomination des conventions sur les paquets utilisés. Notre application principale n'est pas conforme à la dénomination com.company.application standard et contient plusieurs noms de packages. Mon application utilise la convention com.company.application.

Cheers,

Andez

+1

Ne pas copier les choses dans jre6/lib/ext. – Thilo

Répondre

0

Salutations pour avoir essayé d'aider Jon.

J'ai essayé de simplifier la publication ici car je pensais que c'était un problème de classpath. Vous m'avez fait un peu comprendre et quelque chose que quelqu'un au bureau a dit au sujet du manifeste, j'ai regardé le contenu du fichier jar.

Notre application se compose de nombreux jar tiers et de nombreux paquets - qui comprenaient des fichiers de classe importés des tierces parties. Je suis tombé sur le dossier META-INF dans le pot et j'ai remarqué un INDEX.LIST et un MANIFEST.MF. Mon autre projet propre avait seulement le fichier MANIFEST.MF. J'ai supprimé l'INDEX.LIST de notre fichier jar de l'application et tout a fonctionné. Mais chaque fois que j'ai compilé, il a généré l'INDEX.LIST. J'ai jeté un coup d'oeil sur le site ANT mais je n'ai pas pu voir pourquoi cela était généré.

J'ai encore regardé le code source et il y avait un paquet META-INF dans le projet. Pas trop sûr d'où il vient ou qui l'a mis là. Mais je l'ai supprimé et tout semble fonctionner à la minute - bien que je n'ai testé que 5% de l'application.

Cheers,

Andez

+0

Modifiez jar.index = $ {jnlp.enabled} en jar.index = false dans project.properties ou plus globalement dans Outils> Options> Java> Ant> Propriétés. – jla

2

Cela peut être un problème de classpath, lorsque vous exécutez un programme java vous devez définir le chemin de classe pour inclure toutes les bibliothèques de votre programme a besoin. Par défaut, vous chargez les bibliothèques jre-wide, c'est pourquoi le placement des fichiers jar dans% JAVA_HOME%/lib ou% JAVA_HOME%/lib/ext fonctionnera (mais ces jars seront disponibles pour tout code que vous exécutez et que vous n'avez probablement pas intention).

Assurez-vous que vous fournissez un argument -classpath dans votre ligne de commande, par exemple

java foo.bar.baz -classpath;. ./ lib/Jide-oss.jar

+0

s/peut être/est/:-) Bienvenue à SO. –

+0

donc quelque chose comme: C:. \ Windows \ System32 \ java.exe-jar "MyAppJarFile.jar" -classpath; ./ lib/My3rdPartyLib.jar Dois-je spécifier chaque fichier jar je référencement? Ou puis-je fournir un caractère générique *? J'ai essayé ceci mais semble jeter la même exception sur la même ligne de code. Je regarde http://download-llnw.oracle.com/javase/1.4.2/docs/tooldocs/windows/classpath.html – Andez

+0

J'ai joué dans le fichier Jar. Je l'ai ouvert en utilisant WinRAR. Quand netbeans a compilé mon application, il a créé un fichier INDEX.LIST sous le dossier META-INF. J'ai simplement supprimé ce fichier et tout va bien. J'ai remarqué dans mon autre application que ça n'a pas été construit et je ne sais pas pourquoi? Des idées? Cheers Andez – Andez

Questions connexes