2012-06-21 23 views
5

मैं वर्तमान में नेटबीन 7.1 के साथ मेवेन का उपयोग करते समय सामना कर रहा हूं और समस्या का सामना कर रहा हूं - मैंने एक lib शामिल किया है जिसे मैं सिस्टम स्कोप में मैवेन रिपॉजिटरी में नहीं रख सकता।सिस्टम स्कोप का उपयोग करते समय NoClassDefFoundError

<dependency> 
    <groupId>org.company</groupId> 
    <artifactId>FBTM</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <scope>system</scope> 
    <systemPath>${project.basedir}/lib/FBTM-1.0-SNAPSHOT.jar</systemPath> 
</dependency> 

आईडीई इस निर्भरता ठीक लेने के लिए, के रूप में यह निर्भरता फ़ोल्डर (परियोजना दृश्य) में पता चलता है और मैं जार सामग्री देख करने में सक्षम हूँ लगता है: यह निम्नलिखित की तरह कुछ लग रहा है। मैं बिना किसी मुद्दे के जार से कक्षाएं भी आयात कर सकता हूं।

हालांकि, जब मैं अपनी परियोजना को चलाने का प्रयास करता हूं (और रनटाइम में उपयोग की जाने वाली कक्षाओं में से कोई भी है) मुझे प्रश्न में कक्षा के लिए NoClassDefFoundError मिलता है। यह कोई वर्ग हो सकता है।

स्टैकट्रेस: ​​

Exception in thread "main" java.lang.NoClassDefFoundError: com/company/otaupdate/sim/commands/Select at com.company.fbtranslationlibrary.mc.scripts.UserData$1.<init>(UserData.java:30) at com.company.fbtranslationlibrary.mc.scripts.UserData.<init>(UserData.java:28) at com.company.fbtranslationlibrary.mc.MS.get_profile_script(MuscadeScript.java:80) at com.company.fbtranslationlibrary.mc.MS.access$300(MS.java:16)

कोई मदद या संकेत बहुत सराहना की जाएगी!

+1

समस्याएं हल करने '$ {project.basedir}', हो सकता है में उल्लेख किया? – m0skit0

+0

गुंजाइश: सिस्टम गलत लगता है, क्या आपको ऐसा होने की आवश्यकता है? या आप किसी के साथ प्रयास नहीं कर सकते (या संकलित)। – esej

+0

सटीक अपवाद संदेश/स्टैक ट्रेस क्या है? – Attila

उत्तर

2

प्रणाली गुंजाइश के लिए:

Maven Doc का कहना है:

प्रणाली

छोड़कर आप करने के लिए है कि जार जो यह स्पष्ट रूप से शामिल है प्रदान प्रदान की यह गुंजाइश समान है। आर्टिफैक्ट हमेशा उपलब्ध है और एक भंडार में नहीं देखा जाता है।

आपका आईडीई किसी भी तरह जार प्रदान करता है। लेकिन चलाते समय आप इसे प्रदान करने की आवश्यकता है।

डिफ़ॉल्ट दायरे के साथ प्रयास करें (यह बिल्कुल कोई स्कोप टैग नहीं है)।

संपादित करें: यदि आप सिस्टम स्कोप रखने के लिए मेवेन चाहते हैं, तो आपको क्लासपाथ के माध्यम से जार रनटाइम प्रदान करना होगा।

+3

कोई स्कोप टैग का उपयोग सिस्टमपैथ टैग को अमान्य होने का कारण बनता है। – krslynx

0

ऐसा लगता है कि नेटबीन एप्लिकेशन धावक निष्पादन कक्षापथ पर इस जेएआर फ़ाइल को रखने के लिए पर्याप्त स्मार्ट नहीं है।

आप इस निर्भरता के लिए अपने स्थानीय भंडार में JAR और POM फ़ाइलों को क्यों नहीं जोड़ते? फिर आप नियमित निर्भरता का उपयोग कर सकते हैं।

वैकल्पिक रूप से, देखें कि इस एप्लिकेशन के लिए नेटबीन एप्लिकेशन लॉन्चर के लिए रनटाइम क्लासपाथ को ट्विक करने का कोई तरीका है या नहीं। (मुझे यकीन है कि मैं सही शब्दावली यहाँ उपयोग कर रहा हूँ नहीं कर रहा हूँ ... मैं एक ग्रहण व्यक्ति हूँ।)

+0

मैं केवल इस निर्भरता के लिए जार प्रदान कर सकता हूं, क्योंकि यह एम 2 प्रोजेक्ट नहीं है। क्या यह पर्याप्त होगा? – krslynx

0

मैं इस परियोजना के लिए निम्नलिखित build.xml बनाने के द्वारा इस समस्या का समाधान:

<!-- make the repo dir --> 
    <mkdir dir="${m2.home}" /> 

    <!-- copy libs --> 
    <copy todir="${m2.home}"> 
     <fileset dir="dist"/> 
    </copy> 

    <!-- copy pom --> 
    <copy todir="${m2.home}"> 
     <fileset dir="pom"/> 
     <mapper> 
      <mapper type="regexp" 
       from="pom.xml" to="${m2.app.name}-${m2.app.ver}.pom" /> 
     </mapper> 
    </copy> 

    <!-- use naming policy --> 
    <copy todir="${m2.home}"> 
     <fileset dir="dist"/> 
     <mapper> 
      <mapper type="regexp" 
       from="${m2.app.name}.jar" to="${m2.app.name}-${m2.app.ver}.jar" /> 
     </mapper> 
    </copy> 

    <!-- remove unnecessiary files --> 
    <delete> 
    <fileset dir="${m2.home}"> 
     <include name="${m2.app.name}.jar"/> 
     <include name="README.TXT"/> 
    </fileset> 
    </delete> 
</target> 

मैं मैन्युअल रूप से भी परियोजना है, जिसमें मैं एक ही नामकरण सम्मेलनों का उपयोग कर स्थानीय भंडार को पर कॉपी के लिए एक pom.xml फ़ाइल बनाने के लिए किया था। यह सबसे अच्छा समाधान संभव नहीं है, लेकिन काफी अच्छी तरह से काम करता है।

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