java - 命令行加载时编织

标签 java annotations aspectj

所以我开始使用 AspectJ 并遇到了问题。以下示例在 Eclipse 中完美运行,但是当我尝试在 bash 中运行它时,它不起作用。

这是我将监视的代码:

public class TestClass {
  public static void method1() {
    System.out.println("Hello World!");
  }

  public static void main(String[] args) {
    method1();
  }
}

这是我的方面类:

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

    @Aspect
    public class LogMe {
        @Pointcut("call(public* TestClass.*())")
        public void metCall() {}

        @After("metCall()")
        public void aftercallAdvice() {
            System.out.println("Blah");
        }
    }

我所做的是使用 META-INF/aop-ajc.xml 创建名为“apsects.jar”的 jar

<?xml version="1.0" encoding="UTF-8"?>
<aspectj>
        <aspects>
                <aspect name="LogMe"/>
        </aspects>
        <weaver options="-showWeaveInfo"/>
</aspectj>

我尝试这样运行它:

java -javaagent:/home/tdi/dev/test/aspectjweaver.jar -classpath "aspects.jar;/home/tdi/dev/test/aspectjrt.jar"TestClass

我得到的是:

错误:无法找到或加载主类 TestClass

如何在 LTW 方面运行此应用程序?

最佳答案

也许 TestClass 没有与方面一起出现在 JAR 文件中可能是一个问题。您可以尝试将带有 aop-ajc.xml 的文件夹 META-INF 放入包含 TestClass.class 的工作目录中。

另一个选择是将您的运行命令与 Eclipse 的运行命令进行比较。您可以通过在 Debug模式下运行项目来执行此操作,然后右键单击该进程并打开其属性。然后就可以在命令行看到eclipse是如何运行项目的。

关于java - 命令行加载时编织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20108298/

相关文章:

java - 想要在同一个类中创建 JFrame 和 JPanel 并拥有自己的 PaintComponent?

java - 注释属性 RequestMapping.value 的值必须是常量表达式

c# - 访问自定义属性中的声明类?

java - 默认 XML 元素

java - 使用 AspectJ 调试企业 Java 应用程序

java - AspectJ 没有编译

java - System.currentTimeMillis()/1000 如何在 JAVA 中工作

java - 向 JavaFx tableView 添加一个简单的行

java - 为什么在 Autowiring 期间我的自定义注释记录 bean 为空?

java - 好奇的Spring AOP异常