2010-09-09 18 views
6

यह आसान होना चाहिए।AspectJ: अन्य परियोजनाओं में स्थित कक्षाओं की सलाह देने के लिए पॉइंटकूट कैसे प्राप्त करें

प्रश्न
आप एक परियोजना में एक pointcut एक अन्य परियोजना के भीतर कोड/वर्गों सलाह देने के लिए कैसे मिलता है?


संदर्भ
मैं दो परियोजनाओं के साथ ग्रहण में काम कर रहा हूं। स्पष्टीकरण में आसानी के लिए, हम एक विज्ञान परियोजना और अन्य गणित परियोजना फोन और कहते हैं कि विज्ञान परियोजना गणित परियोजना पर निर्भर करता है और मैं दोनों परियोजनाओं में विकासशील हूँ, समवर्ती करते हैं। गणित परियोजना उत्पादन में एक मुख्य उत्पाद है, और अगर मैं कोड को अधिक संशोधित नहीं करता तो जीवन आसान होगा।

वर्तमान में, मैं इन दो परियोजनाओं के बीच बातचीत को डीबग कर रहा हूं। इसके साथ सहायता करने के लिए, मैं गणित कोड (और विज्ञान कोड) निष्पादित होने के रूप में महत्वपूर्ण जानकारी लॉग इन करने के लिए एक पहलू (विज्ञान परियोजना के भीतर) लिख रहा हूं।


उदाहरण
मैं की तर्ज पर एक सरल उदाहरण पहलू चल:

package org.science.example; 

public aspect ScientificLog { 
    public pointcut testCut() : execution (public * *.*(..)); 
    before() : testCut() { 
     //do stuff 
    } 
} 


समस्या
समस्या है, कोई बात नहीं क्या pointcut मैं बनाने के लिए, यह केवल सलाह देता है विज्ञान परियोजना से कोड। org.math.example से कोई कक्षा नहीं है, सभी पर!

मैं proect properties > AspectJ Build > Inpath के लिए जा रहा है और ऐड परियोजना क्लिक करके और गणित परियोजना का चयन करके विज्ञान परियोजना की inpath को गणित परियोजना जोड़ने की कोशिश की। यह काम नहीं किया लेकिन ऐसा लगता है कि मुझे उन पंक्तियों के साथ कुछ करने की ज़रूरत है।

धन्यवाद, अग्रिम में, किसी भी सुझाव ...

-gMale


संपादित करें 1:
इस लेखन, मैंने देखा है के बाद से परियोजना निम्न त्रुटि दे रहा है:

Caused by: org.aspectj.weaver.BCException: Unable to continue, this version of AspectJ 
supports classes built with weaver version 6.0 but the class 
com.our.project.adapter.GenericMessagingAdapter is version 7.0 
when batch building BuildConfig[null] #Files=52 AopXmls=#0

तो हो सकता है कि यह ठीक से सेटअप हो और त्रुटि अधिक सूक्ष्म हो। बीटीडब्लू, कक्षा का उल्लेख "विज्ञान परियोजना" से है, इसलिए बोलने के लिए। यह परियोजना को साफ करने के बाद भी होता है। मैं वर्तमान में इस त्रुटि googling हूँ ...


संपादित करें 2:
मैं ऊपर में comment #5 here

त्रुटि का हल पाया समस्या Maven-AspectJ-प्लगइन का पोम फ़ाइल aspectjtools संस्करण 1.6 पर निर्भरता की घोषणा की है .7। इसलिए, प्लगइन को कॉन्फ़िगर करते समय, उस क्षणिक निर्भरता को संशोधित किया जाना चाहिए। यहां पोम फ़ाइल के लिए संबंधित कोड स्निपेट है जो 1.6 के बजाय संस्करण 1.6.9 निर्दिष्ट करके समस्या को हल करता है।7:

    <plugin> 
          <groupId>org.codehaus.mojo</groupId> 
          <artifactId>aspectj-maven-plugin</artifactId> 
          <version>1.3</version> 
          <dependencies> 
           <dependency> 
            <groupId>org.aspectj</groupId> 
            <artifactId>aspectjtools</artifactId> 
            <version>1.6.9</version> 
           </dependency> 
          </dependencies> 
          <configuration> 
            <source>1.6</source> 
            <target>1.6</target> 
          </configuration> 
          <executions> 
            <execution> 
              <goals> 
                <goal>compile</goal> 
                <goal>test-compile</goal> 
              </goals> 
            </execution> 
          </executions> 
        </plugin> 

उत्तर

4

आपकी दूसरी समस्या पहले से संबंधित नहीं है। यह कह रहा है कि com.our.project.adapter.GenericMessagingAdapter मूल रूप से संकलित और AspectJ के एक नए संस्करण के खिलाफ बुना हुआ था लेकिन AspectJ के पुराने संस्करण के खिलाफ बाइनरी बुनाई के लिए उपयोग किया जा रहा है।

यह अनिवार्य रूप से वही समस्या है जब आप 1.6 वीएम पर 1.6 के तहत संकलित जावा कक्षाओं को चलाने की कोशिश करते हैं।

संस्करण संख्या को AspectJ 1.6.8 (मुझे लगता है, या शायद यह 1.6.7 था) के रिलीज के लिए संशोधित किया गया था।

समाधान यह सुनिश्चित करना है कि आप अपनी सभी परियोजनाओं के लिए AspectJ के नवीनतम संस्करण का उपयोग कर रहे हैं (उदाहरण के लिए 1.6.9, या डीवी 1.6.10 का निर्माण)।

+0

धन्यवाद, आप बिल्कुल सही हैं। मैंने अपवाद को हल किया और तदनुसार मेरे प्रश्न को ऊपर अपडेट किया। दुर्भाग्यवश, समय के लिए, मुझे अनिवार्य रूप से "गणित परियोजना" को "विज्ञान परियोजना" में खींचने का निर्देश दिया गया है। जाहिर है, यह समस्या से बचाता है लेकिन मैं दूसरी बग को ठीक करने के प्रभाव को निर्धारित करने में असमर्थ हूं क्योंकि कोड बेस अब पूरी तरह से अलग है और उपversण में बैकट्रैकिंग में बहुत अधिक समय लगेगा। आपकी सहायता के लिए धन्यवाद. चूंकि आप एकमात्र प्रतिक्रिया हैं, इसलिए मैं आपके सभी संदेशों को वोट दूंगा और आपको जवाब दूंगा। धन्यवाद! – gMale

2

आप विज्ञान परियोजना के रास्ते में करने के लिए गणित परियोजना को जोड़ते हैं, गणित परियोजना के कोड के सभी AspectJ बुनकर के माध्यम से भेजा जाता है और ठीक से बुना। उस बुनाई के परिणाम विज्ञान परियोजना के आउटपुट फ़ोल्डर (मैथ प्रोजेक्ट के नहीं) में लिखे गए हैं। इसलिए, यदि आप विज्ञान परियोजना के बिन फ़ोल्डर में देखना चाहते हैं, तो आपको बुने हुए वर्गों को देखना चाहिए।

यदि आप नियमित फ़ाइलों से अलग पथ फ़ाइलों को रखना चाहते हैं, तो आप एक इनपैथ आउट फ़ोल्डर निर्दिष्ट कर सकते हैं। यह फ़ोल्डर क्लास पथ में बाइनरी फ़ोल्डर के रूप में भी जोड़ा जाना चाहिए। साथ ही, यह फ़ोल्डर विज्ञान प्रोजेक्ट के लिए जावा बिल्ड पेज के "निर्यात और ऑर्डर" टैब में मैथ प्रोजेक्ट पर प्रोजेक्ट निर्भरता के ऊपर रखा जाना चाहिए।

अंत में, यदि आप गणित परियोजना से बजाए विज्ञान परियोजना से मुख्य वर्ग चलाते हैं, तो आप बुने हुए कोड को निष्पादित करेंगे।

+0

प्रतिक्रिया के लिए धन्यवाद। असल में, आपने मेरे लिए पुष्टि की है कि मुझे इसे काम करने में सक्षम होना चाहिए और इनपैथ जाने का सही तरीका था। प्रश्न लिखने के बाद से, मैंने अब एक त्रुटि देखी है कि मैं वर्तमान में गुगलिंग कर रहा हूं। शायद यह एकमात्र समस्या है ... मैं त्रुटि के साथ प्रश्न अद्यतन कर दूंगा। – gMale