Я хотел бы найти или создать загрузчик классов Java, который загружает только системные классы, исключая любые классы в определенном приложением пути. Моя цель - использовать этот загрузчик классов для создания загрузчика классов, который загружается из определенного JAR-файла, разрешая системные классы с использованием системного загрузчика классов, но не загрязняя классы из JAR-файла любыми классами, определенными моим приложением.Нужен Java-системный загрузчик классов
До сих пор я не нашел способа создать системный загрузчик классов, который не использует частные API или не делает предположений о реализации Java. См. Код ниже, который работает в моей текущей среде, но делает нежелательные предположения.
Если нет возможности создать независимый от системы системный загрузчик классов, есть ли причина, почему нет? Я пытаюсь сделать плохую идею?
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/");
}
Почему вы пытаетесь это сделать? что вы пытаетесь достичь? – jtahlborn
@jtahlborn Он очень четко изложил свои соображения: «Моя цель ...» – qqilihq
@qqilihq - нет, ОП описал «что» он пытался достичь, а не «почему» – jtahlborn