[英]Syntax error, annotations are only available if source level is 5.0 - AspectJ in Maven
[英]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.