2013-03-09 4 views
24

मेवेन बहुत अच्छा है। यह मुझे pom कॉन्फ़िगरेशन में निर्भर पैकेज के संस्करण निर्दिष्ट करके जार निर्भरता नरक से बाहर रखता है, और उन्हें स्वचालित रूप से लागू करता है। यह एम 2 ई के माध्यम से एक्लिप्स के साथ भी महान एकीकरण है, ताकि चीजें आईडीई में सहजता से काम कर सकें।मेवेन और ग्रहण: किसी परियोजना में गैर-मेवेन या बाहरी जार जोड़ने का एक विश्वसनीय तरीका?

यह उन सभी निर्भरताओं के लिए बहुत अच्छा है जो विश्व स्तर पर मेवेन के लिए जाने जाते हैं। हालांकि, कभी-कभी, ऐसे पुस्तकालय होते हैं जिन्हें एक परियोजना में शामिल करने की आवश्यकता होती है जो मेवेन रिपोस में उपलब्ध नहीं है। इस मामले में, मैं आमतौर पर उन्हें अपनी परियोजना में lib/ निर्देशिका में जोड़ता हूं। जब तक वे कक्षा में होते हैं तब चीजें संकलित होती हैं।

हालांकि, किसी परियोजना को आयात करते समय समस्या उन्हें स्वचालित रूप से शामिल करने जा रही है। मैं इस समस्या को आधा बेक्ड फिक्सेस और हैक के साथ बहुत लंबे समय तक सहन कर रहा हूं। प्रत्येक बार जब कोई इस प्रोजेक्ट को इंस्टॉल करता है, तो मुझे उन्हें अपने ग्रहण निर्माण पथ में lib/ में जार मैन्युअल रूप से जोड़ने के लिए कहना होगा ताकि सभी त्रुटियां दूर हो जाएं। निम्नलिखित की तरह कुछ:

enter image description here

मैं एक तरह से एक तरीका है कि दोनों mvn कमांड लाइन कार्यक्रम और ग्रहण के साथ काम करता में इस प्रक्रिया को स्वचालित करने के लिए खोज कर रहा हूँ: अधिक ग्रहण पर बल दिया जाता है क्योंकि यह अच्छा है ऐसी परियोजनाएं हैं जो आप उन्हें आयात करते समय संकलित करते हैं।

मैं इसके लिए एक रेपो सर्वर स्थापित नहीं करना चाहता, न ही मेरे पास घर में मालिकाना घटक हैं जो स्थानीय रूप से कुछ भी स्थापित करने की गारंटी देंगे। मेरे पास बस कुछ जार फ़ाइलें हैं जहां डेवलपर्स मेवेन का उपयोग नहीं करते हैं; और मैं उनके साथ संकलन करना चाहता हूं ... मुझे बस अपने सॉफ़्टवेयर के वितरण में शामिल करने में सक्षम होना चाहिए, है ना?

मैं वास्तव में इसे लागू करने के लिए एक उचित तरीका ढूंढ रहा हूं जो बिना किसी झगड़े के ग्रहण में काम करेगा। This is one solution मुझे आशाजनक मिला है, लेकिन निश्चित रूप से इस समस्या का आधिकारिक समाधान प्रतीत नहीं होता है। करीब आने वाली एकमात्र चीज maven-addjars-plugin है, जो ठीक काम करती है लेकिन केवल कमांडलाइन पर। इस प्लग बुरा नहीं है, और एक बहुत ही उचित विन्यास है:

<plugin> 
    <groupId>com.googlecode.addjars-maven-plugin</groupId> 
    <artifactId>addjars-maven-plugin</artifactId> 
    <version>1.0.5</version> 
    <executions> 
     <execution> 
      <goals> 
       <goal>add-jars</goal> 
      </goals> 
      <configuration> 
       <resources> 
        <resource> 
         <directory>${project.basedir}/lib/java-aws-mturk</directory> 
        </resource> 
        <resource> 
         <directory>${project.basedir}/lib/not-in-maven</directory> 
        </resource> 
       </resources> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

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

<pluginManagement> 
    <plugins> 
     <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.--> 
     <plugin> 
      <groupId>org.eclipse.m2e</groupId> 
      <artifactId>lifecycle-mapping</artifactId> 
      <version>1.0.0</version> 
      <configuration> 
       <lifecycleMappingMetadata> 
        <pluginExecutions> 
         <pluginExecution> 
          <pluginExecutionFilter> 
           <groupId> 
            com.googlecode.addjars-maven-plugin 
           </groupId> 
           <artifactId> 
            addjars-maven-plugin 
           </artifactId> 
           <versionRange> 
            [1.0.5,) 
           </versionRange> 
           <goals> 
            <goal>add-jars</goal> 
           </goals> 
          </pluginExecutionFilter> 
          <action> 
           <execute /> 
          </action> 
         </pluginExecution> 
        </pluginExecutions> 
       </lifecycleMappingMetadata> 
      </configuration> 
     </plugin> 
    </plugins> 
</pluginManagement> 
+1

के रूप में एक निर्भरता को जोड़ने मैं स्थानीय नेक्सस स्थापना पर भरोसा करना पसंद करूंगा। –

+1

मैं इस सॉफ्टवेयर को दूसरों को उपयोग करने में सक्षम होना चाहता हूं, इसलिए यह अनुचित लगता है। यह केवल कुछ जार है जिन्हें मैं साझा करना चाहता हूं, इसलिए यह जटिल नहीं होना चाहिए। –

+0

नेक्सस (या कोई अन्य रेपो कार्यान्वयन) आपकी निर्माण प्रक्रिया में मदद करेगा, इसलिए आपके उपयोगकर्ताओं के लिए इसकी आवश्यकता नहीं होगी; जबकि यदि आप एफओएसएस हैं, तो अन्य पुस्तकालयों को मंत्रमुग्ध करना और पैच अपस्ट्रीम भेजना समुदाय में योगदान देगा। वैसे भी, आपकी पसंद। –

उत्तर

45

1) आप प्रणाली गुंजाइश निर्भरता

<dependency> 
     <groupId>test</groupId> 
     <artifactId>x</artifactId> 
     <version>1.0</version> 
     <scope>system</scope> 
     <systemPath>${basedir}/lib/x.jar</systemPath> 
    </dependency> 

2) के रूप में उपयोग कर सकते हैं आप

भंडार/परीक्षण/एक्स/1.0/x- स्थानीय Maven भंडार करने के लिए अपने x.jar कॉपी कर सकते हैं 1.0.jar

और

<dependency> 
     <groupId>test</groupId> 
     <artifactId>x</artifactId> 
     <version>1.0</version> 
    </dependency> 
+1

देखें जो वास्तव में मुझे चाहिए था। यह जार भी इस पर निर्भर परियोजनाओं के लिए उपलब्ध कराता है। ग्रहण के साथ पूरी तरह से एकीकृत करता है और यह सभी प्रबंधन-रेपो और एक्सएमएल से बचाता है जो हर कोई सुझाव दे रहा है। मेवेन रिपॉजिटरीज़ में बकवास कॉपी करने में भी शामिल नहीं है। +100 अपवॉट्स अगर मैं कर सकता था। –

+1

@Andrew Mao ठीक है अगर यह समाधान आपके लिए काम करता है। इस तथ्य से सावधान रहें कि [सिस्टम स्कोप निर्भरता "प्रदत्त" निर्भरताओं के समान हैं (http://maven.apache.org/guides/introduction/introduction-to- निर्भरता-mechanism.html#Dependency_Scope)। इस प्रकार वे एक लक्षित मंच पर मौजूद होने की उम्मीद है और इसे पैकेज किए गए आर्टिफैक्ट (जैसे युद्ध फ़ाइल) में शामिल नहीं किया जाएगा। – FrVaBe

+2

मुझे सिस्टम स्कोप को क्षणिक निर्भरताओं के संचालन को और डाउनस्ट्रीम को प्रभावित करने के लिए मिला है और हम इसका उपयोग नहीं कर सके। मेरा मानना ​​है कि आपके स्थानीय भंडार में आवश्यक कलाकृतियों को स्थापित करना (मैन्युअल रूप से या लिखित) उचित तरीका है। –

0

यह आप Maven Resources Plugin का उपयोग आप के लिए यह करने के लिए हो सकता है कि मुझे लगता है। बस उचित जीवन चक्र चरण (संकलन से पहले एक चरण) में संसाधनों की प्रतिलिपि बांधें। आपको सबसे अधिक मेवेन-कंपाइलर-प्लगइन को ट्विक करने की आवश्यकता होगी ताकि संकलन और रनटाइम पर इन पुस्तकालयों को कक्षा के आधार पर रखा जा सके।

5

आप मैवेन-इंस्टाल-प्लगइन के साथ स्थानीय रेपो में किसी प्रोजेक्ट \ lib फ़ोल्डर से फ़ाइलों को स्थापित करने के लिए मेवेन का उपयोग कर सकते हैं। मैंने जेडीबीसी ड्राइवरों के साथ पहले यह किया है। आपको इसके लिए एक अलग पोम बनाना होगा और इसे mvn -f installdeps.pom या उसके जैसा कुछ निष्पादित करना होगा।

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

<plugin> 
     <!-- We dont want children attempting to install these jars to the repo. --> 
     <inherited>false</inherited> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-install-plugin</artifactId> 
     <executions> 
      <execution> 
       <id>Microsoft JDBC Driver File 1</id> 
       <phase>install</phase> 
       <goals> 
        <goal>install-file</goal> 
       </goals> 
       <configuration> 
        <file>lib/sqljdbc4.jar</file> 
        <groupId>com.microsoft</groupId> 
        <artifactId>microsoft-jdbc-driver</artifactId> 
        <version>4.0</version> 
        <packaging>jar</packaging> 
       </configuration> 
      </execution> 
      <execution> 
       <id>ojdbc5</id> 
       <phase>install</phase> 
       <goals> 
        <goal>install-file</goal> 
       </goals> 
       <configuration> 
        <file>lib/ojdbc5.jar</file> 
        <groupId>com.oracle</groupId> 
        <artifactId>ojdbc5</artifactId> 
        <version>11.1.2</version> 
        <packaging>jar</packaging> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 
संबंधित मुद्दे