簡體   English   中英

AspectJ在跟蹤源文件中的注釋時出錯

[英]AspectJ is giving error for tracing annotations in source files

我有一個像這樣的方面代碼:

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");
    }
}

我試圖在上面的代碼中跟蹤junit @Test 我編譯方面時,使用以下命令:

ajc -classpath aspectjrt.jar:junit-4.10.jar  -outxml -outjar aspects.jar  TestCaseTrace.java

但是這個命令給出了這樣的錯誤:

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,方面版本是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(默認值)這意味着-source 1.4和-target 1.2。

因此,如果您需要更高的合規性版本,則需要在調用ajc時明確指定版本:

ajc -classpath aspectjrt.jar:junit-4.10.jar -1.5 -outxml -outjar aspects.jar  TestCaseTrace.java
                                            ^^^^ you need this

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM