Java AspectJ在跟踪源文件中的注释时出错
我有这样一个方面代码:Java AspectJ在跟踪源文件中的注释时出错,java,aspectj,aspect,Java,Aspectj,Aspect,我有这样一个方面代码: package aspects; import java.util.logging.Level; import java.util.logging.Logger; import org.aspectj.lang.Signature; import org.junit.Test; public aspect TestCaseTrace{ // pointcut traceTestCase() : (execution(public * test*(.
package aspects;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.aspectj.lang.Signature;
import org.junit.Test;
public aspect TestCaseTrace{
// pointcut traceTestCase() : (execution(public * test*(..)));
pointcut traceTestCase() : (execution(@Test * *(..)));
before(): traceTestCase(){
String sourceName = thisJoinPointStaticPart.getSourceLocation().getWithinType().getCanonicalName();
Signature sig = thisJoinPointStaticPart.getSignature();
System.out.println("Test case name is " + sig.getDeclaringTypeName() + "." + sig.getName() + "\n\n");
}
after(): traceTestCase(){
// Logger.getLogger("Tracing").log(Level.INFO,"Test case got over\n\n");
System.out.println("Test case got over\n\n");
}
}
TestCaseTrace.java:13 [error] annotation type patterns are only supported at Java 5 compliance level or above
pointcut traceTestCase() : (execution(@Test * *(..)));
1 error
我试图在上面的代码中跟踪junit@Test
。在编译方面时,使用以下命令:
ajc -classpath aspectjrt.jar:junit-4.10.jar -outxml -outjar aspects.jar TestCaseTrace.java
但此命令会产生如下错误:
package aspects;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.aspectj.lang.Signature;
import org.junit.Test;
public aspect TestCaseTrace{
// pointcut traceTestCase() : (execution(public * test*(..)));
pointcut traceTestCase() : (execution(@Test * *(..)));
before(): traceTestCase(){
String sourceName = thisJoinPointStaticPart.getSourceLocation().getWithinType().getCanonicalName();
Signature sig = thisJoinPointStaticPart.getSignature();
System.out.println("Test case name is " + sig.getDeclaringTypeName() + "." + sig.getName() + "\n\n");
}
after(): traceTestCase(){
// Logger.getLogger("Tracing").log(Level.INFO,"Test case got over\n\n");
System.out.println("Test case got over\n\n");
}
}
TestCaseTrace.java:13 [error] annotation type patterns are only supported at Java 5 compliance level or above
pointcut traceTestCase() : (execution(@Test * *(..)));
1 error
我在哪里犯了错误
使用的Java版本为1.7,aspect版本为1.8.6
编辑:
在遵循答案之后,我可以编译带有警告的代码。但在此之后,如果我使用生成的aspect.jar
检查junit测试用例:
import org.junit.Test;
class HelloWorldApp {
@Test
public void testSome()
{
A.methodA();
}
}
class A{
public static void methodA()
{
methodB();
}
public static void methodB()
{
}
}
并使用命令行运行:
java -javaagent:aspectjweaver.jar -cp aspects.jar:. HelloWorldApp
没有打印任何内容。AspectJ编译器的默认符合性级别独立于Java运行时的版本。默认值(ajc)为Java 1.4,具体如下: 将合规性级别设置为1.4(默认值),这意味着-源1.4和-目标1.2 因此,如果您需要更高的遵从性版本,则需要在调用
ajc
时明确指定版本:
ajc -classpath aspectjrt.jar:junit-4.10.jar -1.5 -outxml -outjar aspects.jar TestCaseTrace.java
^^^^ you need this
它给出了一些其他警告,如:
TestCaseTrace.java:21[warning]在aspects.TestCaseTrace中定义的建议尚未应用[Xlint:adviceDidNotMatch]TestCaseTrace.java:15[warning]在aspects.TestCaseTrace中定义的建议尚未应用[Xlint:advicednotmatch]
@batman,这意味着切入点从未匹配过。由于您没有任何-inpath
(或-injar
)规范,我希望(没有要处理的文件)。我已经编辑了这个问题,您能帮我找到哪里出错了吗?