2013-07-07 53 views
0

我使用JavaCompiler進行在運行時
ClassNotFoundException的負荷運行時編譯的子類

package com.notmycompany; 

import com.mycompany.Processor; 
import com.mycompany.Event; 

public class CustomProcessor extends Processor { 

    @Override 
    public void process(Event evt) { 
     // Do you own stuff 
     System.out.println("My Own Stuff"); 
    } 
} 

編譯順利,我結束了,我嘗試使用加載類文件從Web應用程序中編譯CustomProcessor.java URLClassLoader

URL[] urls = new URL[]{ new URL("file://d:/temp/") }; 
URLClassLoader ucl = new URLClassLoader(urls); 
Class clazz = ucl.loadClass("com.notmycompany.CustomProcessor"); 

的問題是我打它,我在應用程序中使用其他地方ClassNotFoundExceptionProcessor(如我知道它的存在)。
我需要做什麼com.mycompany.Processor在運行時是可見的

Caused by: java.lang.ClassNotFoundException: com.mycompany.Processor 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 30 more 

謝謝。

+0

什麼'CustomProcessor.class'的位置? – Jeffrey

+0

'd:/ temp/com/notmycompany /' – MonoThreaded

+0

URLClassLoader是否需要所有其他類的路徑? – MonoThreaded

回答

0

它被送到了一個完整的類路徑使用URLClassLoader的問題
this question 爲我所用

URLClassLoader ucl2 = new URLClassLoader(new URL[] { new URL("file://d:/temp/")}, urlClassLoader); 
Class<?> clazz = ucl2.loadClass("com.notmycompany.CustomProcessor"); 
+0

我有完全相同的問題 - 我的代碼工作正常,直到從Web應用程序運行它。 (URL,(URLClassLoader)ClassLoader.getSystemClassLoader());這是一個錯誤的父類加載器,我改變了: URLClassLoader urlLoader = new URLClassLoader(url,(URLClassLoader)ClassLoader.getSystemClassLoader()); 到 URLClassLoader urlLoader = new URLClassLoader(url,Thread.currentThread()。getContextClassLoader()); – Brian