Est-il possible de décharger les bibliothèques standard Java - celles définies dans les paquets java. *?Comment décharger les bibliothèques standard Java
Mon application a besoin pour exécuter des tests JUnit, chacun avec son propre ClassLoader
, comme ceci:
for(String testClass : testClasses) {
CustomClassLoader cl = new CustomClassLoader(this.getClass().getClassLoader());
Class<?> _class = cl.loadClass(testClass);
JUnitCore junit = new JUnitCore();
Result result = junit.run(_class);
registerResult(result, cl);
}
Le problème que j'ai est que certaines classes ne sont pas déchargés - Java * classes.. Si je ne les décharge pas, alors que se passe-t-il si les classes de test stockent des objets en utilisant des méthodes statiques, comme celles fournies par la classe java.security.Security
, alors j'obtiens un ClassCastException
.
Y a-t-il un moyen pour moi de forcer leur déchargement?
Les classes java standard sont généralement chargées (une seule fois) par le classloader parent de votre CustomClassLoader. Donc, je ne comprends pas vraiment l'exigence de les décharger ... –
@Andreas_D car il peut y avoir des valeurs globales statiques partagées entre les tests, comme les singletons. – aperez