我想创建一个父/ last/child-first类加载器,例如一个类加载器,它首先在子类loder中查找类,然后只委托它的父ClassLoader来搜索类.
澄清:
现在我知道,要得到完整的类加载分离-我需要使用像传递null,因为它是父的URLClassLoader,归功于这个回答我刚才的问题
但是,当前的问题来帮我解决这个问题:
我的代码+依赖jar正被加载到现有系统中,使用ClassLoader将System的ClassLoader设置为它的父级(URLClassLoader)
该系统使用的某些库与我需要的版本不兼容(例如,旧版本的Xerces,不允许我运行我的代码)
如果运行独立,我的代码运行完全正常,但如果从该ClassLoader运行则它会失败
Howerver我确实需要访问父ClassLoader中的许多其他类
因此,我想允许我使用自己的Override,父类加载器"jars":如果在子类加载器中找到我调用的类(例如,我提供了一个带有我自己的jar的更新版本的Xerces,而不是一个用户由加载我的代码和jar的ClassLoader.
这是加载我的代码+ Jars的系统代码(我无法更改此代码)
File addOnFolder = new File("/addOns");
URL url = addOnFolder.toURL();
URL[] urls = new URL[]{url};
ClassLoader parent = getClass().getClassLoader();
cl = URLClassLoader.newInstance(urls, parent);
Run Code Online (Sandbox Code Playgroud)
这是"我的"代码(完全取自Flying Sauser"Hello World"代码演示):
package flyingsaucerpdf;
import java.io.*;
import com.lowagie.text.DocumentException;
import org.xhtmlrenderer.pdf.ITextRenderer;
public class FirstDoc {
public static void main(String[] args)
throws IOException, DocumentException {
String f = new File("sample.xhtml").getAbsolutePath();
System.out.println(f);
//if(true) return;
String inputFile = "sample.html";
String url = new File(inputFile).toURI().toURL().toString();
String outputFile = …Run Code Online (Sandbox Code Playgroud)