[英]Dynamic loading of java class for activiti Service Task
我需要動態加載一個 jar 並將其類提取到類路徑,這樣就不需要重新啟動服務器。 這是用於 activi 服務任務,其中 java 類將作為 jar 提供。 我嘗試了類似下面的內容,但是在部署服務任務時,它給出了錯誤“無法實例化 packageName.className。”我猜這意味着找不到該類。
URLClassLoader loader = (URLClassLoader)ClassLoader.getSystemClassLoader();
log.info("LOADER" +loader.getURLs());
MyClassLoader l = new MyClassLoader(loader.getURLs());
l.addURL(new URL("jar","","file:"+artifactLocation+"!/"));
JarFile jarFile = new JarFile(artifactLocation);
Enumeration e = jarFile.entries();
while (e.hasMoreElements()) {
JarEntry je = (JarEntry) e.nextElement();
if (je.isDirectory() || !je.getName().endsWith(".class")) {
continue;
}
// -6 because of .class
String className = je.getName().substring(0, je.getName().length() - 6);
className = className.replace('/', '.');
Class c = l.loadClass(className);
關於如何使用 OSGI 方法以外的自定義 classLoader 解決此問題的任何想法?
URLClassLoader
的實例。 通常是這樣,但對於下一版本的 java 來說可能不是這樣。URLClassLoader
就可以了。 當使用URLClassLoader(URL[] urls)
構造函數實例化時,它將正確地委托給其父類加載器,因此您只需要自己的 .jar 文件的 URL。ClassLoader
知道如何從 .jar 文件加載類Thread.currentThread().setContextClassLoader(l)
Class.forName("my.foo.class")
加載您的類
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.