2010-07-21 13 views
84

मैं यह पता लगाने की कोशिश कर रहा हूं कि कितने (लगभग 50+) maven2 परियोजनाओं को व्यवस्थित करना है, ताकि वे केंद्रीय नेक्सस भंडार में तैनात हो सकें। पर इस ब्लॉक को रोकने के लिएमैवेन के वितरण प्रबंधन संगठन को विस्तृत कैसे करें?

<distributionManagement> 
    <repository> 
     <id>nexus-site</id> 
     <url>http://central_nexus/server</url> 
    </repository> 
</distributionManagement> 

अब, मैं (उन 50 + की) हर एक pom.xml नहीं करना चाहती: mvn deploy लक्ष्य का उपयोग कर, एक इस तरह distributionManagement टैग में लक्ष्य निर्दिष्ट करने की आवश्यकता है और फिर से। मेरा पहला हालांकि settings.xml फ़ाइल होगा, लेकिन ऐसा लगता है कि इसे परिभाषित करने के लिए यह संभव नहीं है (डिज़ाइन द्वारा)। तो, पहला सवाल होगा, वह मामला क्यों है? यदि यह संभव होगा तो मैं इसे maven2 वितरण में settings.xml में निर्दिष्ट कर सकता हूं, जिसे सभी डेवलपर्स को वितरित किया जा सकता है।

मुझे मिला एकमात्र संभावित समाधान एक संगठन-व्यापी मास्टर-पोम प्रोजेक्ट बनाना था, जिसमें इन सेटिंग्स शामिल हैं, और अन्य सभी pom.xml इस मास्टर-पोम पर <parent> टैग के माध्यम से निर्भर करते हैं। लेकिन इस बहु मॉड्यूल में एक तरह से अजीब लग बनाता है:

- master configuration POM (pm) 
- Project 1 parent pom (p1 with module 1 and module 2 as modules) 
    - Project 1 module pom (with pm as parent) 
    - Project 2 module pom (with pm as parent) 

आमतौर पर मैं सभी प्रलेखन कि मॉड्यूल poms माता पिता पोम, नहीं कुछ अलग एक का उपयोग करना चाहिए में पढ़ें। लेकिन विरासत बनाम एकत्रीकरण के बारे में मेवेन वेबसाइट पढ़ने के बाद यह लिखा गया है कि यह वास्तव में संभव है।

एक समस्या यह है मैंने पाया Maven साइट पीढ़ी है, जो

तो इस सेटअप के साथ समस्याओं (मॉड्यूल सही ढंग से जुड़ा हुआ नहीं होता है अगर वे कोई सीधा वापस संदर्भ है) है लगता है के साथ था, यह एक मान्य है दृष्टिकोण? समस्या के लिए कोई अन्य, अधिक स्पष्ट, सरल समाधान?

+1

http://maven.apache.org/pom.html#Distribution_Management – OhadR

+4

@ ओहडआर: वे केवल एक प्रोजेक्ट में इसे लिखना लिखते हैं। प्वाइंट यह है कि मैं इसे 500 गुना डुप्लिकेट नहीं करना चाहता था ... – mglauche

+1

मैं देखता हूं। मुद्दा लेना। इसलिए जिसने उत्तर दिया, उसके पास प्रोजेक्ट के लिए मुख्य पोम हो सकता है, जिसमें 'distribMngmnt' होगा ... – OhadR

उत्तर

124

इसके लिए सबसे अच्छा समाधान आपके संगठन की सभी परियोजनाओं के लिए सामान्य रूप से एक साधारण पेरेंट पोम फ़ाइल प्रोजेक्ट (पैकेजिंग 'पोम' के साथ) बनाना है।

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>your.company</groupId> 
    <artifactId>company-parent</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <distributionManagement> 
     <repository> 
      <id>nexus-site</id> 
      <url>http://central_nexus/server</url> 
     </repository> 
    </distributionManagement> 

</project> 

यह बनाया जा सकता है जारी की है, और अपने स्थानीय गठजोड़ के लिए तैनात किया ताकि हर कोई पहुंच है यह विरूपण साक्ष्य है करने के लिए।

<parent> 
    <groupId>your.company</groupId> 
    <artifactId>company-parent</artifactId> 
    <version>1.0.0</version> 
</parent> 

यह समाधान आप आसानी से सभी को अपनी कंपनी की परियोजनाओं के लिए अन्य आम चीजों को जोड़ने के लिए अनुमति देगा:

अब सभी परियोजनाओं जो आप इसका इस्तेमाल करना चाहते हैं, तो बस इस खंड शामिल हैं। उदाहरण के लिए यदि आप अपने जुनीट उपयोग को एक विशिष्ट संस्करण में मानकीकृत करना चाहते हैं, तो यह उसके लिए एक आदर्श जगह होगी।

यदि आपके पास ऐसी परियोजनाएं हैं जो बहु-मॉड्यूल संरचनाओं का उपयोग करती हैं जिनके माता-पिता हैं, तो मैवेन चेनिंग विरासत का भी समर्थन करता है, इसलिए यह आपकी परियोजना की मूल पोम फ़ाइल को आपकी कंपनी के मूल पोम को संदर्भित करने के लिए पूरी तरह से स्वीकार्य है और परियोजना के बाल मॉड्यूल नहीं हैं यहां तक ​​कि आपकी कंपनी के माता-पिता से भी अवगत है।

मैं आपके उदाहरण परियोजना संरचना से देखता हूं कि आप अपने मूल परियोजना को अपने एग्रीगेटर पोम के समान स्तर पर रखने का प्रयास कर रहे हैं। अगर आपकी परियोजना को अपने माता-पिता की ज़रूरत है, तो मैंने पाया है कि सबसे अच्छा तरीका माता-पिता को शेष मॉड्यूल के समान स्तर पर शामिल करना है और आपके एग्रीगेटर pom.xml फ़ाइल को अपनी सभी मॉड्यूल की निर्देशिकाओं के रूट पर मौजूद है।

- pom.xml (aggregator) 
    - project-parent 
    - project-module1 
    - project-module2 

आप इस संरचना के साथ क्या कर एग्रीगेटर में अपने माता पिता के मॉड्यूल में शामिल हैं और साथ एक रूट निर्देशिका से 'mvn स्थापित' सब कुछ का निर्माण होता है।

हम अपने संगठन में इस सटीक समाधान का उपयोग करते हैं और यह समय की परीक्षा में खड़ा रहा है और हमारे लिए काफी अच्छा काम करता है।

+2

मुझे चेनिंग विरासत, अच्छा बिंदु के बारे में पता नहीं था! – mglauche

+0

यहां एक और जवाब है जहां मैं प्रोजेक्ट विरासत का अधिक विस्तार से वर्णन करता हूं और इसकी विरासत जटिलता का प्रबंधन कैसे करें, पन क्षमा करें। ;) http://stackoverflow.com/questions/6347913/ –

+7

बस एक छोटा सा नोट: कारणों के लिए * क्यों * कंपनी माता-पिता सबसे अच्छा समाधान है, चर्चा देखें [settings.xml में वितरण प्रबंधन निर्दिष्ट नहीं कर सकता] (http : मैवेन उपयोगकर्ता की सूची से //maven.40175.n5.nabble.com/Can-t-specify- वितरण योगदान-in-settings-xml-td3181781.html)। –