Supposons que j'ai compilé un script Groovy à l'aide de Groovyc, qui a généré un ou plusieurs fichiers .class dans le système de fichiers. A partir d'une application Java, comment ajouter dynamiquement ces classes au classpath pour les charger et appeler leurs méthodes? L'objectif est de pré-compiler les scripts Groovy et de les stocker dans la base de données, afin que l'évaluation puisse être effectuée à partir des versions compilées des scripts.Chargement des classes non présentes dans le chemin de classe
Répondre
Vous pouvez créer une instance de URLClassLoader pour charger de nouvelles classes à partir d'un répertoire:
URL dirUrl = new URL("file:/" + "path_to_dir" + "/"); // 1
URLClassLoader cl = new URLClassLoader(new URL[] {dirUrl},
getClass().class.getClassLoader()); // 2
Class loadedClass = cl.loadClass("com.xyz.MyClass");
MyClass obj = (MyClass) loadedClass.newInstance();
obj.doSomething();
Ligne 1 crée le URL
dans le répertoire où les fichiers .class résident.
La ligne 2 crée une nouvelle instance URLClassLoader
. Le premier argument est un tableau d'URL à utiliser comme source. Vous pouvez spécifier plusieurs URL d'annuaire dans le tableau. Le second argument est le classloader qui deviendra le parent de ce nouveau chargeur de classe. Nous passons le classloader de la classe exécutant le code ci-dessus comme argument.
Les classes chargées par un chargeur de classe enfant peuvent accéder aux classes chargées par le chargeur de classes parent.
Vous devez écrire votre propre classloader.
Ce javadoc link a un exemple de la façon dont vous pouvez en définir un personnalisé.
Cela fonctionne, merci! J'évalue si ce serait la meilleure approche dans le cadre de mon projet. –
- 1. comment trouver des classes présentes dans une bibliothèque C++ (.lib)?
- 2. pouvez importer les classes présentes dans le système distant?
- 3. Rails chargement automatique des classes dans le répertoire personnalisé
- 4. Java: astérisque pour le chargement des classes
- 5. exception de classe non trouvé pour com.mysql.jdbc.Driver pas un problème de chemin d'accès aux classes
- 6. Chargement automatique des classes Symfony dans Zend_Framework
- 7. Obtenir un chemin de classes complet à partir d'une classe
- 8. Charger des classes Java basées sur un chemin de classe dans un fichier de propriétés
- 9. classes dans pseudo-classe
- 10. Java AOT + chargement dynamique des classes java
- 11. chemin d'accès des rails non affiché dans le navigateur (parfois)
- 12. Classe jQuery dans le sélecteur de classes
- 13. Spécification du chemin de classes pour les classes dans le JAR lui-même
- 14. modifier le chemin de classe Jboss
- 15. Chargement de la classe Url dans Ruby
- 16. Comment obtenir le chemin des classes de sortie du projet dans le plugin eclipse
- 17. Réglage Ruby chemin de chargement externe
- 18. Comment est défini le chemin de chargement Ruby? Le "$:" global
- 19. C# Récupère le chemin de la bibliothèque de classes
- 20. Chargement de classe dynamique en Java (énumération)
- 21. Est-il possible de déclarer le chemin de classe d'une applet dans le JAR et non dans l'étiquette de l'applet?
- 22. Comment utiliser sql join où table1 a des lignes non présentes dans table2
- 23. Classe privée (méthode non classe) dans un module Ruby?
- 24. Classes JavaBeans dans des fichiers JAR distincts
- 25. Bibliothèque de classes ou non?
- 26. Forcer le chargement de la classe
- 27. Classes imbriquées "publiques" ou non
- 28. Fichiers de classe Groovy non inclus dans le déploiement
- 29. Ordre de plusieurs jndi.properties sur le chemin de classe
- 30. Comment définir le chemin de classe pour rJava dans R?
Cela fonctionne, avec une seule modification sur la ligne 2 parce que dans mon cas, je charge un script Groovy compilé: au lieu de getClass(). Class.getClassLoader() J'utilise le nouveau GroovyClassLoader(). Merci. –