Je dois utiliser des jarres supplémentaires pendant l'exécution du programme. J'ajoute manuellement les jars dans le dossier relatif .lib puis j'exécute le programme. Comment dois-je définir le classpath dans le fichier manifeste?Comment utiliser l'expression régulière dans le classpath de Java?
Répondre
Vous ne pouvez pas utiliser d'expressions régulières ou d'autres caractères génériques dans l'attribut Class-Path
de votre manifeste.
Il n'y a qu'un seul caractère générique pris en charge en Java, et qui ne fonctionne que sur si elle est spécifiée sur la ligne de commande sur un « manuel » java
invocation (à savoir ne pas utiliser -jar
): using directoryname/*
.
Existe-t-il une autre approche que d'utiliser la commande -cp ou la fonction classloader? – Suraj
@Suraj: demander d'autres approches sans nous dire pourquoi ces approches ne sont pas bonnes pour vous est ... plutôt inutile. Et personnellement, je le trouve plutôt grossier aussi. –
Désolé pour ça! En fait, je suis en train de programmer le code pour une approche conviviale et de déployer la même chose dans un fichier exécutable. C'est d'avoir une base de données générique où l'utilisateur peut choisir sa base de données. Par conséquent, il doit spécifier le pot de connectivité nécessaire et le mettre dans le dossier accessible du programme. Je pensais que si je pouvais utiliser l'expression régulière dans un classpath manifeste comme lib/* OR lib/*. Jar, de sorte que lorsque le programme s'exécute, il trouve tous les jars. – Suraj
Je ne suis pas trop sûr de ce que vous voulez exactement, mais vous pouvez ajouter des pots lors de l'exécution:
-
liste
- fichiers (pot) en utilisant File.list() sur le répertoire contenant les pots
- faire une expression régulière sur les noms de fichiers que vous récupérez
- utiliser un URLClassLoader pour charger le pot
Je ne sais pas comment enregistrer exactement (le cas échéant) les URLClassLoaders au classloader principal. Mais c'est comme ça que je pense que j'irais.
Vous ne pouvez pas modifier le chargeur de classe bootstrap dans la spécification (il existe des hacks laids qui peuvent le faire, en utilisant 'addURL()'). La solution conforme à la spécification consisterait simplement à placer la classe de boostrapping dans son propre pot, à l'utiliser pour trouver tous les autres jars (y compris le «vrai» pot principal) et à charger tous ceux dans un chargeur de classe. Appelez ensuite la méthode principale réelle à partir de la classe principale réelle. –
- 1. java classpath dans unix
- 2. Définir l'agent Classpath dans - Le Grinder Java
- 3. Définir CLASSPATH correctement dans JAVA
- 4. Comment utiliser Maven classpath pour exécuter la classe principale Java?
- 5. Problème de Java Classpath
- 6. Classpath dans le manifeste
- 7. Java Classpath Problèmes dans Ubuntu
- 8. Eclipse PDE: Comment ajouter le classpath du projet java au classpath d'un plug-in?
- 9. java setting classpath
- 10. Java Classpath en contexte
- 11. Java classpath NoClassDefFoundError
- 12. Problème Java Classpath
- 13. Définir classPath pour Java
- 14. Java - classpath mise
- 15. Java classpath - Linux
- 16. Classpath Java pour le projet web dynamique
- 17. Java classpath chargement question
- 18. Java Manifest.mf classpath issues
- 19. configuration classpath en java
- 20. utiliser classpath eclipse dans les tâches ant
- 21. problème Java classpath
- 22. Java - Problème avec le classpath sur Eclipse
- 23. Java import, sans CLASSPATH
- 24. Problème avec le classpath dans le projet Java
- 25. Comment trouver le classpath actuel de jvm?
- 26. Java: Récupère le classpath d'une autre application
- 27. Classpath dans une application Java Web Start
- 28. java classpath variable dans RHEL 5.4
- 29. Problèmes Java Jar et Classpath
- 30. Comment utiliser l'expression régulière extraire le nombre dans le()?
J'ai une solution! Je vais inclure des variables comme: Class-Path: lib/externaljar1.jar lib/externaljar2.jar etc jusqu'à 5 ou 10 valeurs. Puis, tout en incluant des fichiers jars pendant l'exécution, ill le renommez simplement comme externaljar1, externaljar2 etc. et copiez-le dans le dossier lib. ;-) – Suraj
Je remercie tous1 qui ont répondu à ma requête. Merci beaucoup! – Suraj