当我在库上使用 Java 反射调用时,我尝试在带有来自我的 Web 服务器的 jar 的小程序中使用 AspectJ loadtime-weaving。必须加载的类的名称作为参数传递。因此,我不能使用编译时编织。
这是我的小程序“MyApplet”的一些代码:
URLClassLoader appletClassLoader = (URLClassLoader)
RemoteConfigurationApplet.class.getClassLoader();
URL[] urlList = appletClassLoader.getURLs();
URL aspectJar = null;
try {
aspectJar = new URL("https://myserver:8443/MyWebApp/applet/MyApplet.jar/");
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
WeavingURLClassLoader weavingClassLoader = new WeavingURLClassLoader(urlList,
new URL[]{ aspectJar }, Thread.currentThread().getContextClassLoader());
但是,我总是遇到一个例外:
org.aspectj.bridge.AbortException: bad aspect library: "/MyWebApp/applet/MyApplet.jar"
我怀疑在“addAspectLibrary”中使用文件对象是造成问题的原因:
private void addAspectLibrary(String aspectLibraryName) {
File aspectLibrary = new File(aspectLibraryName);
if (aspectLibrary.isDirectory() || (FileUtil.isZipFile(aspectLibrary))) {
try {
info("adding aspect library: '" + aspectLibrary + "'");
weaver.addLibraryJarFile(aspectLibrary);
} catch (IOException ex) {
error("exception adding aspect library: '" + ex + "'");
}
} else {
error("bad aspect library: '" + aspectLibrary + "'");
}
}
它会截断 URL,然后在硬盘上查找它找不到的文件。有没有人可以让它运行的解决方案?