まず、それはすべて機能していましたが、突然停止しただけで、何かをしたのか、どこかに問題があるのか 本当にわかりません。
私のクラスローダーは実行時にjarファイルをロードする必要がありますが、明らかにそうではありません。
String url = "https://" + serverHost + "/" + getJarPath() + "se.jar";
log.info("http url is: " +url);
String https = url.replaceAll("\\s","");
URL httpsURL = new URL(https);
log.info("https url is: " + httpsURL);
URLConnection con = httpsURL.openConnection();
addURL(con.getURL());
private void addURL(URL https) throws IOException {
Class<?>[] parameters = new Class[]{URL.class};
// IMPORTANT: MUST use the webapp classloader - so derived extension classes can resolve their base classes
ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
// cast to a URL class loader so we can add additional JAR(s) to the search path
URLClassLoader webappClassLoader = (URLClassLoader)contextClassLoader;
Class<?> sysclass = URLClassLoader.class;
Method method;
try {
method = sysclass.getDeclaredMethod("addURL", parameters);
method.setAccessible(true);
method.invoke(webappClassLoader, new Object[]{ https });
} catch (NoSuchMethodException | SecurityException e) {
log.log(Level.WARNING, "FATAL Exception", e);
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
log.log(Level.WARNING, "FATAL Exception", e);
}
}
URL の完全なパスを開示することはできませんが、jar が文字列の URL が示す場所にあることを 101% 確認できますが、DefNotFoundClassException が発生します。