【问题标题】:Load-time weaving and java -jar加载时编织和 java -jar
【发布时间】:2014-06-27 15:55:14
【问题描述】:

是否可以在使用 -jar 启动程序时添加 aspectj 加载时间代理?

如果我开始使用 Jetty

java -javaagent:aspectjweaver-1.8.0.jar -classpath toto.jar -jar start.jar

aspectj 不适用。但我如果打电话

java -javaagent:aspectjweaver-1.8.0.jar -classpath toto.jar;start.jar org.eclipse.jetty.start.Main

一切都很好。

【问题讨论】:

    标签: aop aspectj


    【解决方案1】:

    -jar 和 LTW 的问题似乎在于类加载顺序与 -cp (...) my.MainClass 方法相比有所不同。可能在编织器可以看到类路径上的方面 JAR 中的方面和 META-INF/aop-ajc.xml 之前加载了用 -jar 指定的 JAR。我找到了一种解决方法,但它并不好:您可以将方面 JAR 放在 JVM 的引导类路径中,但在这种情况下,方面甚至在编织代理之前就已加载。因此,您还必须将 aspectjrt.jar 添加到引导类路径:

    java -Xbootclasspath/a:aspect.jar;lib\aspectjrt.jar -javaagent:lib\aspectjweaver.jar -jar application.jar
    

    考虑到这种情况,我想最好将应用程序 JAR 添加到普通类路径并手动指定主类。但这是一个品味问题,以及您在启动应用程序时是否知道主类名称。

    【讨论】:

      猜你喜欢
      • 2011-05-06
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      • 2011-11-06
      • 1970-01-01
      相关资源
      最近更新 更多