2010-07-06 10 views
6

के साथ अच्छी तरह से एकीकृत है मैं कई मॉड्यूल (लगभग 10 वर्तमान में) पर एक छोटी टीम (3 व्यक्तियों) में काम कर रहा हूं। निर्माण संस्करणों का संकलन, एकीकरण और प्रबंधन अधिक से अधिक कठिन हो रहा है। मैं चींटी को प्रतिस्थापित/पूर्ण करने के लिए एक अच्छा निर्माण/एकीकरण उपकरण ढूंढ रहा हूं।एक अच्छा जावा निर्माण उपकरण पर सलाह, ग्रहण

यहाँ हमारे वर्तमान विकास के वातावरण का वर्णन है: - प्रत्येक पर पर और तीसरे पक्ष के जार के आधार पर कई मॉड्यूल - कुछ (फैट-जार) के साथ जार, कुछ निर्यात युद्ध, कुछ निर्यात स्टैंडअलोन, runnable जार निर्यात कर सकते हैं - उन सभी के लिए जावाडोक - हम ग्रहण - प्रत्येक मॉड्यूल के लिए कस्टम एंट स्क्रिप्ट के साथ काम करते हैं। ग्रहण विन्यास और चींटी स्क्रिप्ट के बीच कई अनावश्यक जानकारी। उदाहरण के लिए, स्टैंडअलोन फैट-जेएआर के लिए, हमने सभी रिकर्सिव निर्भरताओं को सूचीबद्ध किया है, जबकि आदर्श रूप से, यह स्पष्ट रूप से ग्रहण विन्यास से आयात किया जा सकता है। - स्रोत कोड SVN

यहाँ है का उपयोग कर रहा मेरे लिए क्या करने के लिए एक आदर्श एकीकरण उपकरण चाहते हैं क्या संस्करणीकृत है:

  • automatize विज्ञप्ति और मॉड्यूल के संस्करण। आदर्श रूप से, एकीकरण उपकरण को पता होना चाहिए कि क्या एक नया संस्करण आवश्यक है। उदाहरण के लिए, यदि मैं प्रोजेक्ट ए को रिलीज़ करना चाहता हूं जो कि प्रोजेक्ट बी पर निर्भर करता है, और यदि मैंने स्थानीय रूप से प्रोजेक्ट बी पर छोटे बदलाव किए हैं, तो एकीकरण टूल को पहले बी के नए संस्करण को भी रिलीज़ करना चाहिए और ए पर आधारित होना चाहिए यह।

  • ग्रहण के साथ दृढ़ता से एकीकृत करें, ताकि यह मॉड्यूल और तृतीय पक्ष libs के बीच इसकी कॉन्फ़िगरेशन के बीच निर्भरता प्राप्त कर सके। बीटीडब्लू, मैं कुछ अन्य ".xml" सामग्री को अपडेट किए बिना ग्रहण के साथ बिल्ड पथ को कॉन्फ़िगर करना जारी रखना चाहता हूं। मैंने देखा कि ग्रैडल ग्रहण परियोजना फ़ाइलों को इसकी कॉन्फ़िगरेशन से उत्पन्न कर सकता है, लेकिन समकक्ष बहुत अच्छा होगा।

  • स्थानीय परियोजनाओं पर "लाइव" और पारदर्शी विकास सक्षम करें। मेरा मतलब है कि मुख्य/"पत्ती" परियोजनाओं के विकास के दौरान मैं अक्सर कोर/आम परियोजनाओं पर छोटे बदलाव करता हूं। मैं अपनी मूल परियोजनाओं के जेएआर को प्रकाशन (यहां तक ​​कि स्थानीय रूप से) की आवश्यकता के बिना तत्काल लीफ परियोजनाओं के लिए उपलब्ध मूल परियोजनाओं पर अपने परिवर्तन करना चाहता हूं।

  • बाहरी मॉड्यूल पर मेरे मॉड्यूल के रिलीज़ के सभी संस्करणों को स्टोर करें। सबसे सरल (शेयर फ़ोल्डर/वेबडाव) सबसे अच्छा होगा। मॉड्यूल की सूची और वितरित कलाकृतियों के साथ एक अच्छा वेब पेज भी बहुत अच्छा होगा।

मैंने कई चीजों के लिए चारों ओर देखा है। Ant4eclipse से (ग्रहण विन्यास को मेरी चींटी लिपि में एकीकृत करने के लिए), मेवेन/आइवी/ग्रैडल टूल्स तक।

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

तो इस बिंदु पर मैं वास्तविक उपयोगकर्ताओं से वास्तविक प्रशंसापत्र ढूंढ रहा हूं। आप किस उपकरण का उपयोग करते हैं? कैसे ? क्या आपके पास वही ज़रूरत है? क्या यह आपके जीवन को कम करता है या रास्ते में आता है?

क्या वहां कुछ उपयोग मामलों या वर्कस्पेस कंकाल का नमूना है, जहां मैं यह देखने के लिए शुरुआती बिंदु के रूप में उपयोग कर सकता हूं कि ये उपकरण क्या सक्षम हैं?

इस संदेश की लंबाई के लिए खेद है। और सलाह के लिए अग्रिम धन्यवाद।

सधन्यवाद,

राफेल

+0

एक निर्माण उपकरण (जैसे चींटी, चींटी + आइवी, ग्रैडल, मेवेन 2, आदि) या एक निरंतर एकीकरण इंजन (जैसे हडसन, क्रूज़ कंट्रोल, बांस, टीमसिटी, आदि)? बिल्ड टूल्स वास्तव में सीआई टूल्स नहीं हैं (इन्हें प्राथमिक सीआई प्रक्रिया को लागू करने के लिए इस्तेमाल किया जा सकता है लेकिन मैं उन्हें सीआई टूल्स के रूप में नहीं मानता)। आपको शायद स्पष्टीकरण देना चाहिए। –

+0

हाँ आप सही हैं, यह निरंतर एकीकरण नहीं है जिसे मुझे चाहिए, बल्कि उपकरण बनाएं। मैं इसे शीर्षक में बदलता हूं। –

उत्तर

2

automatize विज्ञप्ति और मॉड्यूल (...) के संस्करण

संस्करण और भंडार की अवधारणाओं Maven के साथ निर्मित कर रहे हैं और वे यहाँ फिट सकता।

मेवेन SNAPSHOT dependencies का समर्थन करता है। स्नैपशॉट का उपयोग करते समय, मैवेन समय-समय पर एक रन चलाने पर रीपोजिटरी से नवीनतम उपलब्ध स्नैपशॉट डाउनलोड करने का प्रयास करेगा। जब कोई परियोजना सक्रिय विकास में होती है तो स्नैपशॉट आमतौर पर उपयोग किया जाता है।

मेवेन 2 भी version ranges का समर्थन करता है (मैं वास्तव में उन्हें अनुशंसा नहीं करता हूं लेकिन यह एक और कहानी है) उदाहरण के लिए बी को संस्करण [4.0,) (किसी भी संस्करण 4.0 से अधिक या उसके बराबर) पर निर्भर करने के लिए कॉन्फ़िगर करने की अनुमति देता है। यदि आप बी का एक नया संस्करण बनाते हैं और रिलीज़ करते हैं, तो ए इसका उपयोग करेगा।

ग्रहण

m2eclipse प्लगइन ग्रहण के साथ द्वि-दिशात्मक तुल्यकालन प्रदान करता है के साथ दृढ़ता से एकीकृत करें।

स्थानीय परियोजनाओं पर "लाइव" और पारदर्शी विकास सक्षम करें।

m2eclipse प्लगइन "कार्यक्षेत्र संकल्प" का समर्थन करता है: अगर परियोजना एक परियोजना बी पर निर्भर करते हैं और अगर परियोजना बी कार्यक्षेत्र में है, तो आप एक बी स्रोतों पर और B.jar पर नहीं निर्भर करने के लिए कॉन्फ़िगर कर सकते हैं (जो डिफ़ॉल्ट है मोड अगर मैं गलत नहीं हूं)। तो बी स्रोतों पर बदलाव बीजेर बनाने की आवश्यकता के बिना सीधे दिखाई देगा।

बाहरी मॉड्यूल पर मेरे मॉड्यूल के रिलीज़ के सभी संस्करणों को स्टोर करें।

जैसा कि पहले उल्लेख किया गया है, यह वास्तव में मेवेन की एक केंद्रीय अवधारणा है (आपके पास विकल्प भी नहीं है) और फ़ाइल के माध्यम से तैनाती: // या dav: // दोनों समर्थित हैं।


सारांश में, Maven है (शायद) न केवल उम्मीदवार लेकिन मुझे यकीन है कि यह फिट हूँ:

  • आपका परियोजना है कि विदेशी या जटिल नहीं है, वहाँ से डरा कुछ भी नहीं है आपका विवरण (संरचना के कुछ रिफैक्टरिंग की आवश्यकता होगी लेकिन यह एक बड़ा सौदा नहीं होना चाहिए)।
  • Maven भी सर्वोत्तम प्रथाओं के आधार पर एक कार्यप्रवाह लाता है।
  • m2eclipse आईडीई के साथ मजबूत एकीकरण प्रदान करता है।

लेकिन Maven कुछ सीखने की अवस्था है।

+0

m2eclipse समर्थन में द्वि-दिशात्मक सिंक्रनाइज़ेशन का समर्थन करता है कि अगर मैं अपनी परियोजना को अपडेट करता हूं ग्रहण में सेटिंग्स (एक अतिरिक्त स्रोत फ़ोल्डर जोड़ें कहें) क्या यह स्वचालित रूप से pom.xml में भी जोड़ देगा? –

2

सीआई उपकरण? मेरे लिए, केवल एक ही है: the Hudson CI


मैं सेटअप जावा के लिए एक सॉफ्टवेयर विकास के वातावरण करने के बाद, घटकों के साथ:

  • ग्रहण आईडीई
  • तेज
  • बगजिला
  • Maven
  • नेक्सस
  • हडसन सीआई

और कुछ अपाचे, mysql, php, perl, पायथन, .. एकीकरण के लिए।

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

+0

ठीक है, मैं जो देखता हूं, उससे "निरंतर एकीकरण" शायद सही शब्द नहीं था। मुझे अपने लिए स्वचालित रूप से/नियमित रूप से स्रोत बनाने के लिए बाहरी सर्वर की आवश्यकता नहीं है। मुझे बस समय-समय पर साझा मॉड्यूल पर और निर्भरताओं का प्रबंधन करने के लिए अपने मॉड्यूल की नई रिलीज को धक्का देने में सक्षम होना चाहिए। –

+0

... काम पूरा होने के बाद आवश्यकताओं को बदलने के लिए धन्यवाद ...;) –

+0

इसके लिए खेद है। डेवलपर के रूप में, आपको इसका उपयोग करना चाहिए! ;) –

1

चींटी आइवी पर एक नज़र डालें:

आप की तरह एक उत्पाद की जाँच कर सकते हैं। http://ant.apache.org/ivy/

1

कोई चांदी की गोलियां हैं, लेकिन मेरे अनुभव में Maven एक महान परियोजना प्रबंधन उपकरण है। निजी तौर पर, मैं उपversण (संस्करण नियंत्रण के लिए), मैवेन (प्रोजेक्ट/बिल्ड मैनेजमेंट के लिए) और हडसन (निरंतर निर्माण/एकीकरण के लिए) के एक संयोजन का उपयोग करना पसंद करता हूं।

मैं सम्मेलन Maven द्वारा लाया लगता है निर्भरता प्रबंधन के लिए संदर्भ स्विचिंग के लिए वास्तव में उपयोगी है, और बहुत अच्छा है। यदि जार रिपॉजिटरीज़ में नहीं हैं, तो यह निराशाजनक हो सकता है, लेकिन आप उन्हें स्थानीय रूप से इंस्टॉल कर सकते हैं और जब आप तैयार हों तो आप अपनी निजी भंडार होस्ट कर सकते हैं जो अन्य स्थानों को प्रतिबिंबित करता है। मुझे sonar.nexus का उपयोग करके http://www.sonatype.com/ का अच्छा अनुभव मिला है। वे आपको शुरू करने के लिए एक उत्कृष्ट पुस्तक भी प्रदान करते हैं।

यह overkill की तरह अब लग सकता है लेकिन एक अच्छा निर्माण/परीक्षण की स्थापना/अब एकीकृत/रिलीज पर्यावरण, बाद में लाभांश का भुगतान करेगा। रेट्रो-फिट करना हमेशा कठिन होता है, और ऐसा कुछ है जिसे आप आसानी से दोहरा सकते हैं।

अन्त में, मैं Maven के लिए Netbeans एकीकरण पसंद करते हैं के लिए हो, लेकिन वह सिर्फ मुझे :)

2

हम अपने निर्माण प्रक्रिया में Gradle एकीकृत करने के लिए शुरू कर दिया है, और मैं उत्तर देने के लिए जोड़ सकते हैं पहले से ही पोस्ट किया है कि Gradle होगा है भी काम करते हैं। आपकी धारणाएं अधिकतर सही हैं, धीरे-धीरे कफ से अधिक है, लेकिन शक्तिशाली है और स्क्रिप्टिंग के लिए अनुमति देता है और इस तरह के निर्माण के भीतर ही। ऐसा लगता है कि अधिकांश चीजें मेवेन कर सकती हैं, धीरे-धीरे भी घूमता है।

आपके व्यक्तिगत अंक के लिए अब:

संशोधन: Gradle निर्भरता नक्शे, संस्करण का समर्थन करता है, और यदि आप एक सीआई सर्वर में जोड़ने के लिए, आप निर्भर बनाता है स्वचालित ट्रिगर कर सकते हैं /। उदाहरण के लिए, हमारे सभी 'डिलिवरेबल्स' हैं। वार, लेकिन हमारे पास विकास में कई कोड libs (.jars) और एक निष्पादन योग्य .jar हैं। एक कॉन्फ़िगरेशन साझा कोड libs पर युद्ध और "वसा-जार" निर्भर करने के लिए है। फिर, जब साझा libs अपडेट होते हैं, साझा libs पर संस्करणों को टक्कर देते हैं, उपभोग करने वाली परियोजनाओं का परीक्षण करते हैं, तो उन लोगों को पुन: नियोजित करने के लिए निर्भर परियोजनाओं को आग लगाने के लिए हडसन की क्षमता का उपयोग करें। अन्य तरीके भी हैं, लेकिन ऐसा लगता है कि अब हमारे लिए सबसे अच्छा काम है।

ग्रहण के साथ दृढ़ता से एकीकृत करें: आप सही हैं, ग्रेडल ग्रहण फ़ाइलों को उत्पन्न कर सकते हैं। एक बार जब हम जा रहे हैं, तो हम केवल eclipseCp (.classpath को अपडेट करने के लिए) कार्य का उपयोग करते हैं, क्योंकि केवल क्लासपाथ की आवश्यकता होती है। यह एक प्रकार का quirky है (अपने डिफ़ॉल्ट जेआरई पकड़ता है, तो सुनिश्चित करें कि यह सही है, अगर आपको इसकी आवश्यकता है तो निर्यात = "सत्य" नहीं जोड़ता है), लेकिन आपको वहां से 99% रास्ता मिल जाता है।

स्थानीय परियोजनाओं पर एक "लाइव" और पारदर्शी विकास सक्षम करें: यह एक है जिसके बारे में मुझे यकीन नहीं है। मैंने केवल इस मामले में घूमने के आसपास हैक किया है; खपत परियोजना में आर्टिफैक्ट को हटाकर और साझा परियोजना को ग्रहण में चिह्नित किया गया, फिर बाद में वापस कर दिया गया।

बाहरी मॉड्यूल पर मेरे मॉड्यूल के रिलीज़ के सभी संस्करणों को स्टोर करें: सरल और कई दृष्टिकोण मैवेन के समान समर्थित हैं।

उदाहरण के लिए, ग्रेडल के लिए दस्तावेज़ अच्छे हैं, साथ ही उदाहरण परियोजनाएं जो पूर्ण ज़िप के साथ आती हैं। वे आपको उठाएंगे और काफी जल्दी चलेंगे।

+0

दुर्भाग्य से मुझे एक अच्छा ग्रहण विचार एकीकरण नहीं मिला (ऑटो पूर्णता, कार्य सूची, चिह्न त्रुटियां, स्क्रिप्ट विज़ार्ड, आदि)। क्या वहाँ कोई है? – Cengiz

+0

सेन्गीज़, मैं बाद में एक मैवेन पर्यावरण (बदली नौकरियों) में वापस चले गए हैं। लेकिन हम groovy प्लगइन स्थापित करेंगे और इसे .gradle फ़ाइलों से मेल खाने के लिए कहेंगे ताकि हम कम से कम कुछ सिंटैक्स हाइलाइटिंग प्राप्त कर सकें और जैसे, यह अनिवार्य रूप से groovy कोड है। हालांकि, कार्यों में एक प्लगइन है (मुझे लगता है कि यह एसटीएस पर निर्भर करता है लेकिन आप इसे वेनिला ग्रहण पर भी चलाने में सक्षम हो सकते हैं) http://static.springsource.org/sts/docs/2.7.0.M1/reference /html/gradle/gradle-sts-tutorial.html – lucas

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