2013-07-14 10 views
9

मैंने लगभग सभी जुनीट + मेवेन + एस्पेक्टजे प्रश्नों का पालन किया है और यहां तक ​​कि मुझे पूरा यकीन है कि मेरे पास सब कुछ ठीक से सेट है, मैं परीक्षण करने में असमर्थ हूं यह।AspectJ + Junit + Maven - पॉइंटकट परीक्षणों में पहचाना जाता है लेकिन NoSuchMethodError: aspectOf() अपवाद फेंक दिया

@Aspect 
public class AssertionAspect { 

    @Pointcut("execution(@org.junit.Test * *())") 
    public void testMethodEntryPoint() {} 

    @Before("testMethodEntryPoint()") 
    public void executeBeforeEnteringTestMethod() { 
     System.out.println("EXECUTE ACTION BEFORE ENTERING TEST METHOD"); 
    } 

    @After("testMethodEntryPoint()") 
    public void executeAfterEnteringTestMethod() { 
     System.out.println("EXECUTE ACTION AFTER ENTERING TEST METHOD"); 
    } 
} 

बहुत बहुत सरल:

मैं सिर्फ एक पहलू के साथ एक Maven मॉड्यूल है। मैं बस इतना करना चाहता हूं कि मेरी टेस्ट प्रोजेक्ट में किसी भी परीक्षण विधि के प्रत्येक निष्पादन से पहले और बाद में कुछ करना है, जिसे @Test के साथ एनोटेट किया गया है।

अब, मैं अपने <build> में aspectj-maven-plugin उपयोग कर रहा हूँ इस तरह:

<build> 
    <plugins> 
    <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>aspectj-maven-plugin</artifactId> 
     <version>1.4</version> 
     <configuration> 
     <aspectLibraries> 
      <aspectLibrary> 
      <groupId>my.package</groupId> 
      <artifactId>with-aspects</artifactId> 
      </aspectLibrary> 
     </aspectLibraries> 
     <source>1.6</source> 
     <target>1.6</target> 
     </configuration> 
     <executions> 
     <execution> 
      <goals> 
      <goal>test-compile</goal> 
      </goals> 
      <configuration> 
      <showWeaveInfo>true</showWeaveInfo> 
      </configuration> 
     </execution> 
     </executions> 
    </plugin> 
    </plugins> 
</build> 

1) मैं <execution> में कोई compile लक्ष्य है क्योंकि मैं src/main/java (यह सच है और यह ठीक है में कोई कक्षा नहीं है, मुझे पता है कि मैं कर रहा हूँ)

2) मैं

<dependency> 
    <groupId>org.aspectj</groupId> 
    <artifactId>aspectjrt</artifactId> 
    <version>1.7.3</version> 
</dependency> 
<dependency> 
    <groupId>org.aspectj</groupId> 
    <artifactId>aspectjweaver</artifactId> 
    <version>1.7.3</version> 
</dependency> 
मेरी <dependencies> secti में

है पर। पहलू के बारे में और कुछ नहीं।

3) मुझे यकीन है कि मेरे परीक्षण वर्ग पहलू द्वारा पहचाने जाते हैं क्योंकि मुझे लगता है कि शामिल बिंदुओं की सलाह दी गई थी। मैं देखता हूं:

Join point 'method-execution(xyz)' in Type 'blabla' 
(AppTestCase.java:124) advised by before advice from 
'blabla' (my-aspects jar.jar!AssertionAspect.class(from AssertionAspect.java)) 

सलाह के बाद भी यही है।

4) जब मैंने 1.6.11 के बजाय संस्करण 1.7.3 की कोशिश की, तो यह संदेश मुझे दिखाई दिया, जबकि अंक शामिल हुए थे: expected 1.6.11 found 1.7.3। मुझे लगता है कि यह संस्करण 1.4 के aspectj-maven-plugin से एक संदेश है, मुझे वास्तव में पता नहीं है कि 1.5 से इसे छुटकारा पाने के लिए रिलीज़ किया जाएगा। कौन से संस्करण संगत हैं?

5) मेरे "कोड" लगता है कि इस तरह :)

@RunWith(JUnit4.class) 
public class TestClass() { 

    @Test 
    public void test01(){ 
    } 
} 

6) मैं 1.6.0_39 ओरेकल जावा, मैं 1.6 (लक्ष्य, स्रोत के साथ सब कुछ संकलन रहा है .. सब)

तो, पहलुओं को मान्यता दी, लागू किया, मैं mvn clean test तरह परीक्षण निष्पादित करने के लिए जा रहा हूँ, लेकिन सभी मैं है जो:

java.lang.NoSuchMethodError: 
my/aspect/AssertionAspect.aspectOf()Lmy/aspect/AssertionAspect; 

और बहुत लंबा स्टैकट्रेस।

मेरे पास कोई संकेत नहीं है कि वास्तव में क्या गलत हो सकता है।

+0

क्या यह जावा के लिए काम कर रहा है 8 भी? –

उत्तर

9

तो, चाल javac के साथ लेकिन साथ ajc (उर्फ AspectJ-Maven-प्लगइन) नहीं

यह है कि मेरी पहलुओं के साथ कि पुस्तकालय संकलित करने के लिए किया गया था। मुझे इसे मावेन मॉड्यूल में पहलुओं के साथ जोड़ना था (वे स्रोत/मुख्य/जावा में हैं)

पहलुओं को एनोटेशन सवार कर दिया गया है ताकि में 1 हो।6 स्रोत/लक्ष्य/अनुपालन स्तर

AspectJ मॉड्यूल

<!-- Build --> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>aspectj-maven-plugin</artifactId> 
      <version>1.4</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
       <complianceLevel>1.6</complianceLevel> 
       <verbose>true</verbose> 
      </configuration> 
      <executions> 
       <execution> 
        <goals> 
         <goal>compile</goal> 
        </goals> 
       </execution> 
      </executions> 
      <dependencies> 
      </dependencies> 
     </plugin> 
    </plugins> 
</build> 

से आप अपने लक्ष्य मॉड्यूल में इस मॉड्यूल एक परीक्षण निर्भरता के रूप में जोड़ने के लिए आप

लक्ष्य मॉड्यूल

साथ पहलुओं का उपयोग करना चाहते
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>aspectj-maven-plugin</artifactId> 
      <version>1.4</version> 
      <configuration> 
       <aspectLibraries> 
        <aspectLibrary> 
         <groupId>that-artifact</groupId> 
         <artifactId>mentioned-above</artifactId> 
        </aspectLibrary> 
       </aspectLibraries> 
       <source>1.6</source> 
       <target>1.6</target> 
       <complianceLevel>1.6</complianceLevel> 
      </configuration> 
      <executions> 
       <execution> 
        <goals> 
         <goal>test-compile</goal> 
        </goals> 
        <configuration> 
         <showWeaveInfo>true</showWeaveInfo> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

आपको हर जगह 1.6 स्तर का उपयोग करना है

+0

awsome धन्यवाद आदमी –

संबंधित मुद्दे