我尝试用简单的方面做一个简单的项目(hello world)。我使用Maven来构建这个项目,LTW用于方面,logback用于日志。 当我使用时,方面被编织:
"C:\Program Files\Java\jdk1.6.0_22\bin\java"
-javaagent:.\libs\aspectjweaver-1.7.3.jar
-cp ".\libs\ProtoApp-v0.0.1-SNAPSHOT.jar;.\libs\*"
-Xms64m -Xmx512m -XX:MaxPermSize=128m
-Daj.weaving.verbose=true
-Dorg.aspectj.weaver.showWeaveInfo=true
-Dlogback.configurationFile=file:.\logback.xml
org.iiter.continuum.protos.simple.App
但是当我为JMX添加参数时,方面不再编织了:
"C:\Program Files\Java\jdk1.6.0_22\bin\java"
-javaagent:.\libs\aspectjweaver-1.7.3.jar
-cp ".\libs\ProtoApp-v0.0.1-SNAPSHOT.jar;.\libs\*"
-Xms64m -Xmx512m -XX:MaxPermSize=128m
-Daj.weaving.verbose=true
-Dorg.aspectj.weaver.showWeaveInfo=true
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=7777
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dlogback.configurationFile=file:.\logback.xml
org.iiter.continuum.protos.simple.App
如果你们中的任何人能帮助我,我无法弄清楚发生了什么。
我添加的JMX遥控器的选项是:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=7777
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
注意:我尝试使用OSGI应用程序(equinox),它可以正常使用JMX的这些参数,但我真的需要一个常规的Java应用程序。
修改1
我添加了一个Java代理来检查类加载器。
当我激活JMX remote时,类加载器层次结构是(containsConfiguration意味着java.lang.ClassLoader.getResource(String)找到了Aspectj配置):
- root
- AdaptorKey [sysHashCode=1672527304, loaderClass=javax.management.remote.rmi.NoCallStackClassLoader, containsConfiguration=false, hasParent=false]
- AdaptorKey [sysHashCode=1040288884, loaderClass=sun.reflect.DelegatingClassLoader, containsConfiguration=false, hasParent=false]
- AdaptorKey [sysHashCode=239625678, loaderClass=sun.reflect.DelegatingClassLoader, containsConfiguration=false, hasParent=false]
- AdaptorKey [sysHashCode=1818873899, loaderClass=javax.management.remote.rmi.NoCallStackClassLoader, containsConfiguration=false, hasParent=false]
- AdaptorKey [sysHashCode=527532737, loaderClass=sun.misc.Launcher$ExtClassLoader, containsConfiguration=false, hasParent=false]
- AdaptorKey [sysHashCode=132787710, loaderClass=sun.misc.Launcher$AppClassLoader, containsConfiguration=true, hasParent=true]
- AdaptorKey [sysHashCode=426901684, loaderClass=sun.reflect.DelegatingClassLoader, containsConfiguration=false, hasParent=false]
在没有激活JMX远程的情况下,类加载器层次结构为:
- root
- AdaptorKey [sysHashCode=527532737, loaderClass=sun.misc.Launcher$ExtClassLoader, containsConfiguration=false, hasParent=false]
- AdaptorKey [sysHashCode=132787710, loaderClass=sun.misc.Launcher$AppClassLoader, containsConfiguration=true, hasParent=true]
有了这个结果......我仍然不明白发生了什么。配置由我的代理找到,但不是由Aspectj ...
找到在日志中,我看到AspectJ没有注册其他类加载器,只有javax.management.remote.rmi.NoCallStackClassLoader。
为什么?
答案 0 :(得分:1)
我终于找到了一个解决方案:我需要在命令行中添加“ -Xbootclasspath / p:libs / aspectjweaver-1.7.3.jar; libs / aspectjrt-1.7.3.jar ”
使用此选项,一切正常。
完整的命令行是:
java
-javaagent:.\libs\aspectjweaver-1.7.3.jar
-Xbootclasspath/p:libs/aspectjweaver-1.7.3.jar;libs/aspectjrt-1.7.3.jar
-cp ".\libs\ProtoApp-v0.0.1-SNAPSHOT.jar;.\libs\*"
-Xms64m -Xmx512m -XX:MaxPermSize=128m
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=7777
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Daj.weaving.verbose=true -Dorg.aspectj.weaver.showWeaveInfo=true
-Dlogback.configurationFile=file:.\logback.xml
org.iiter.continuum.protos.simple.App
感谢Andy Clement的帮助
Tugdual