相关疑难解决方法(0)

如何在Java中创建父/子/子优先ClassLoader,或如何覆盖已在父CL中加载的旧Xerces版本?

我想创建一个父/ last/child-first类加载器,例如一个类加载器,它首先在子类loder中查找类,然后只委托它的父ClassLoader来搜索类.

澄清:

现在我知道,要得到完整的类加载分离-我需要使用像传递null,因为它是父的URLClassLoader,归功于这个回答我刚才的问题

但是,当前的问题来帮我解决这个问题:

  1. 我的代码+依赖jar正被加载到现有系统中,使用ClassLoader将System的ClassLoader设置为它的父级(URLClassLoader)

  2. 该系统使用的某些库与我需要的版本不兼容(例如,旧版本的Xerces,不允许我运行我的代码)

  3. 如果运行独立,我的代码运行完全正常,但如果从该ClassLoader运行则它会失败

  4. Howerver我确实需要访问父ClassLoader中的许多其他类

  5. 因此,我想允许我使用自己的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)

java classloader

35
推荐指数
3
解决办法
3万
查看次数

标签 统计

classloader ×1

java ×1