2012-04-09 14 views
6

के साथ स्मारक मूल निर्भरता हैंडलिंग मैं वर्तमान में मेवेन का उपयोग करने के लिए एक बड़े बहु-मॉड्यूल प्रोजेक्ट (~ 100 उप-मॉड्यूल) को परिवर्तित करने के बीच में हूं। वर्तमान में हम चींटी + आइवी का उपयोग करते हैं।मेवेन

अभी तक कोई बड़ा मुद्दा सामने नहीं आया है और मुझे आराम है कि मेवेन अभी भी एक अच्छा फिट है। हालांकि, मुझे आश्चर्य है कि मूल निर्भरताओं को संभालने का एक बेहतर तरीका है या नहीं।

अब तक मैं निम्नलिखित निष्कर्षों पर आया हूं।

  1. प्रत्येक मूल निर्भरता को मैवेन रेपो में या तो स्टैंडअलोन लाइब्रेरी या एकाधिक निर्भरताओं वाले संग्रहित पैकेज के रूप में स्थापित करना सबसे अच्छा है।

     <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-dependency-plugin</artifactId> 
         <version>2.4</version> 
         <executions> 
          <execution> 
           <id>copy</id> 
           <phase>compile</phase> 
           <goals> 
            <goal>copy-dependencies</goal> 
           </goals> 
           <configuration> 
            <includeScope>runtime</includeScope> 
            <includeClassifiers>natives-win32</includeClassifiers> 
            <outputDirectory>${project.build.directory}/natives</outputDirectory> 
           </configuration> 
          </execution> 
         </executions> 
        </plugin> 
    
:
  • से प्रत्येक और Maven निर्भरता प्लगइन के साथ हर निर्भरता की घोषणा में खो बल्कि, मैं हर एक वर्गीकारक (जैसे मूल निवासी-Win32) देने के लिए और माता पिता के पोम में निम्न का उपयोग का विकल्प चुना

    अब तक यह एक साधारण ऑल-राउंड समाधान प्रतीत होता है जिसे नई मूल निर्भरताओं को जोड़ने के बारे में बहुत अधिक गड़बड़ की आवश्यकता नहीं होती है। यह मुझे मूल निवासी के प्रबंधन के लिए एक सरल ऑल-राउंड समाधान भी प्रदान करता है। मुझे केवल एक चीज यह सुनिश्चित करना है कि मेरे/मूल/निर्देशिका को java.library.path पर परिभाषित किया गया है।

    एक चीज जो मुझे इस दृष्टिकोण के बारे में परेशान करती है (एक छोटी) यह है कि मेरी सभी मूल निर्भरताओं को प्रत्येक उप-मॉड्यूल में प्रतिलिपि मिलती है जो उन पर एक पारस्परिक निर्भरता व्यक्त करती है, जबकि मेरी खुश जार पुस्तकालयों को संदर्भित वर्गपाथ में जोड़ा जाता है जहां वे मेरे स्थानीय भंडार में बैठते हैं (कोई प्रति आवश्यक नहीं है)।

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

    क्या कोई अन्य संभावित गठिया है कि मुझे उपर्युक्त दृष्टिकोण के बारे में चिंतित होना चाहिए?

  • +0

    आपने आइवी के माध्यम से इसे कैसे हल किया? जिस तरह से आपने वर्णन किया है? – khmarbaise

    +0

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

    +0

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

    उत्तर

    0

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

    +0

    रिकॉर्ड के लिए, मैंने मैवेनिटिव प्लगइन को फोर्क किया है और उस पर सुधार किया है। यह वही फीचर्स और कुछ स्पीड सुधार प्रदान करता है जो आपके प्लेटफॉर्म से संबंधित नहीं हैं और न ही आपके प्लेटफ़ॉर्म से संबंधित हैं। रुचि रखने पर यहां पर आधारित निर्भरता-मेवेन-प्लगइन खोजें: https://github.com/fmarot/nativedependencies- maven –

    0

    आपका स्निपेट एक बिल्ड चरण से जुड़ा एक लक्ष्य दिखाता है, निर्भरता नहीं। एक सुपर पोम में 'कॉपी निर्भरता' लक्ष्य है और सभी मॉड्यूल द्वारा विरासत में मिला है? इसे केवल उन मॉड्यूल में स्थानांतरित करने का कोई तरीका नहीं है जिन्हें ऐप के रूप में चलाने/पैक करने जा रहे हैं?

    0

    यह हो सकता है कि मुझे यह नहीं मिला। लेकिन आप अपने सभी देशी libs को पहले भंडार में क्यों नहीं तैनात करते हैं। यदि देशी libs स्थिर हैं और शायद ही कभी बदलते हैं, यह एक अलग रिएक्टर में किया जा सकता है।

    और बाद में आप जीएवी के माध्यम से किसी अन्य निर्भरता के रूप में उन मूल निर्भरताओं को संदर्भित करते हैं। इसके अलावा अनावश्यक प्रतिलिपि की समस्या हल हो जाती है।