मैं जावा क्लास लोडर को ढूंढना या बनाना चाहता हूं जो केवल सिस्टम कक्षाओं को लोड करता है, एप्लिकेशन परिभाषित वर्ग पथ पर किसी भी वर्ग को छोड़कर। मेरा लक्ष्य उस वर्ग लोडर का उपयोग एक वर्ग लोडर बनाने के लिए करना है जो एक विशिष्ट जेएआर फ़ाइल से लोड होता है, सिस्टम-क्लास क्लास लोडर का उपयोग करके सिस्टम क्लास को हल करता है, लेकिन मेरे आवेदन द्वारा परिभाषित किसी भी कक्षा के साथ जेएआर फ़ाइल से कक्षाओं को दूषित नहीं करता है।जावा सिस्टम-केवल क्लास लोडर की आवश्यकता है
अभी तक मुझे सिस्टम-केवल क्लास लोडर बनाने का कोई तरीका नहीं मिला है जो या तो निजी एपीआई का उपयोग नहीं करता है या जावा कार्यान्वयन के बारे में धारणा नहीं करता है। नीचे दिए गए कोड को देखें जो मेरे वर्तमान माहौल में काम करता है लेकिन अवांछित मान्यताओं को बनाता है।
यदि कार्यान्वयन स्वतंत्र सिस्टम-केवल क्लास लोडर बनाने का कोई तरीका नहीं है, तो क्या ऐसा कोई कारण नहीं है? क्या मैं एक बुरा विचार करने की कोशिश कर रहा हूं?
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