我有一个war文件,其中包含许多AspectJ方面和一个aop.xml文件,它指定了这些方面适用的包。我通过在Spring配置中添加这一行来启用Spring加载时间:
<context:load-time-weaver/>
这启动了我的app服务器的默认编织器:org.springframework.instrument.classloading.weblogic.WebLogicLoadTimeWeaver。
问题是,我们还有另一个方面&amp;系统类路径上的关联aop.xml文件定义由-javaagent:lib / aspectjweaver-1.7.4.jar触发,因此加载另一个编织器。
我看到两个织布工似乎发生了冲突:
[ChangeAwareClassLoader@70b2974f] warning define generated class failed -- (LinkageError) loader (instance of weblogic/utils/classloaders/ChangeAwareClassLoader): attempted duplicate class definition for name: "x/y/MyClassImpl$AjcClosure1"
loader (instance of weblogic/utils/classloaders/ChangeAwareClassLoader): attempted duplicate class definition for name: "x/y/MyClassImpl$AjcClosure1"
java.lang.LinkageError: loader (instance of weblogic/utils/classloaders/ChangeAwareClassLoader): attempted duplicate class definition for name: "x/y/MyClassImpl$AjcClosure1"
我想知道是否有办法让战争使用javaagent线定义的aspectjweaver,所以我只有1个weaver在运行?注意我不想将我的方面从战争转移到系统类路径,因为它们对其他库有许多依赖。
非常感谢任何指导!
由于
答案 0 :(得分:0)
我想知道您是否可以使用其中一个特殊属性来配置AspectJ LTW以关闭与代理相关的编织器,以便不会创建它并替代使用替代。基本上在启动时设置此系统属性:
-Daj.weaving.loadersToSkip=org.springframework.instrument.classloading.weblogic.WebLogicLoadTimeWeaver