Vorrei trovare o creare un programma di caricamento classe Java che carichi solo le classi di sistema, escludendo tutte le classi nel percorso classe definito dell'applicazione. Il mio obiettivo è quello di utilizzare quel programma di caricamento classi per creare un programma di caricamento classe che carichi da un file JAR specifico, risolvendo le classi di sistema usando il caricatore di classi di solo sistema, ma senza contaminare le classi dal file JAR con le classi definite dalla mia applicazione.È necessario un caricatore classe di solo sistema Java
Finora non ho trovato alcun modo per creare un caricatore di classi di solo sistema che non utilizza API private o fa ipotesi sull'implementazione di Java. Vedi il codice qui sotto che funziona nel mio ambiente corrente ma fa ipotesi indesiderate.
Se non è possibile creare un caricatore di classe di solo sistema indipendente dall'implementazione, esiste un motivo per cui no? È quello che sto cercando di fare una cattiva idea?
private ClassLoader createJarClassLoader(File f)
{
ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
if (systemClassLoader instanceof URLClassLoader) {
URLClassLoader cl = (URLClassLoader) systemClassLoader;
URL[] urls = cl.getURLs();
List<URL> wantedURLs = new ArrayList<>();
for (URL u : urls) {
if (isSystemURL(u)) {
wantedURLs.add(u);
}
}
try {
wantedURLs.add(f.toURI().toURL());
} catch (MalformedURLException ex) {
return null;
}
return new URLClassLoader(wantedURLs.toArray(new URL[0]), null);
}
return null;
}
private boolean isSystemURL(URL u)
{
return u.getPath().contains("/jre/");
}
perché stai provando a fare questo? cosa stai cercando di ottenere? – jtahlborn
@jtahlborn Ha dato le sue ragioni molto chiaramente: "Il mio obiettivo è ..." – qqilihq
@qqilihq - no, l'OP ha descritto "cosa" stava cercando di raggiungere, non "perché" – jtahlborn