2014-11-20 11 views
10

से टाइको सुविधाओं को हल करके एक पी 2 रिपोजिटरी बनाना, मैं स्थानीय मैवेन रिपोजिटरी में कलाकृतियों को स्थापित किए बिना रिमोट मेवेन रिपोजिटरी में तैनात किए गए टाइको फीचर कलाकृतियों से पी 2 रिपोजिटरी बनाने की कोशिश कर रहा हूं (Tycho fails to resolve reference from product to eclipse-feature from a different reactor build में), और एक ही रिएक्टर निर्माण में सभी सुविधाओं और भंडार को एक साथ बनाने के बिना।मैवेन रिपॉजिटरी

पृष्ठभूमि

मैं एक बहु-मॉड्यूल टाइको परियोजना है कि कई ग्रहण प्लग इन और सुविधाओं बनाता है।

ताकि मैं प्रत्येक मॉड्यूल को अलग-अलग बना सकूं - और ताकि मैं अपने नेक्सस मेवेन रिपोजिटरी में ओएसजीआई कलाकृतियों का संदर्भ दे सकूं - मैंने अपने लक्षित प्लेटफॉर्म में <pomDependencies>consider</pomDependencies> को सक्षम किया है, और मॉड्यूल के बीच मेवेन निर्भरता या सामान्य रूप से रिपोजिटरी कलाकृतियों को जोड़ा है <dependency/> तत्वों के साथ।

यह अच्छी तरह से काम करता है - मैं सुविधाओं का निर्माण या उनके आश्रित से प्लग इन मेरे स्थानीय Maven भंडार में या एक ही रिएक्टर निर्माण में किया जा रहा बिना प्लगइन परीक्षण चला सकते हैं। उदाहरण के लिए, जब मैं एक प्लगइन परीक्षण परियोजना पर mvn test चलाने के लिए, प्रासंगिक निर्भरता नेक्सस से डाउनलोड किया जाएगा और टाइको खुशी से, इन के खिलाफ मेरी प्रकट में Import-Package रों हल सब कुछ का निर्माण और परीक्षण चलेंगे। अब तक सब ठीक है।

मैं इन सुविधाओं से एक पी 2 भंडार उत्पन्न करना चाहता हूं ताकि मैं उन्हें एक अद्यतन साइट से एक्लिप्स में स्थापित कर सकूं, और ऐसा करने के लिए विज्ञापित तरीका eclipse-repository पैकेजिंग प्रकार के साथ है। लेकिन यहां योजना कम हो गई है - टाइको फीचर निर्भरताओं को हल करने में सक्षम नहीं प्रतीत होता है, वैसे ही रिपॉजिटरीज़ का निर्माण उसी तरह होता है जब यह सुविधाओं के निर्माण के दौरान प्लगइन निर्भरताओं को हल कर सकता है। सभी प्रयास उपज:

  • ही रिएक्टर के हिस्से के रूप निर्माण:

    [ERROR] Cannot resolve project dependencies: 
    [ERROR] Software being installed: my.eclipse.repository raw:0.0.1.'SNAPSHOT'/format(n[.n=0;[.n=0;[-S]]]):0.0.1-SNAPSHOT 
    [ERROR] Missing requirement: my.eclipse.repository raw:0.0.1.'SNAPSHOT'/format(n[.n=0;[.n=0;[-S]]]):0.0.1-SNAPSHOT requires 'my.prj.eclipse.project.feature.feature.group 0.0.0' but it could not be found 
    

    दो तरीके मैं सफलतापूर्वक p2 भंडार का निर्माण किया है कर रहे हैं। यदि मैं टाइपो मल्टी-मॉड्यूल प्रोजेक्ट के भीतर eclipse-repository मॉड्यूल बना देता हूं, और पूरे प्रोजेक्ट को एक साथ बना देता हूं उदा। mvn verify, सुविधाओं को ठीक हल किया गया है। लेकिन मैं यह नहीं करना चाहता। मैं अलग-अलग मॉड्यूल बनाना पसंद करूंगा। इसका मतलब है कि हमारे सीआई में प्रत्येक मॉड्यूल के लिए एक संकेतक हो सकता है, और हम तुरंत देख सकते हैं कि कौन से मॉड्यूल परीक्षण विफल रहे हैं; यह हमें समानांतर निर्माण के अवसर प्रदान करता है; और हम उन मॉड्यूल पर लगातार चलने से बचते हैं जो नहीं बदले हैं। एक मोनोलिथिक मेवेन बिल्ड का उपयोग करना एक शर्म की बात होगी।

  • यदि मैं निर्भरता पर mvn install चलाकर, अपने स्थानीय मेवेन भंडार में टाइपो प्रोजेक्ट स्थापित करता हूं। लेकिन मैं नहीं चाहता कि यह या तो करना है, क्योंकि इसका मतलब यह होगा निर्माण स्वाभाविक irreproducable है, क्योंकि यह स्थानीय भंडार की स्थिति के प्रति संवेदनशील होना होगा चाहते हैं। हमारी सीआई वर्तमान में प्रति नौकरी मेवेन रिपोजिटरी बनाए रखने के लिए स्थापित है और निष्पादन की शुरुआत में इसे पूरी तरह से मिटा दें, ताकि हमें इस संभावित गड़बड़ी से बचाया जा सके।

तो मेरे सवाल है: वहाँ एक तीसरा रास्ता है? वहाँ किसी भी तरह से मैं टाइको प्लगइन एक दूरस्थ Maven रिपोजिटरी से सुविधाओं डाउनलोड करने के लिए eclipse-repository पैकेजिंग प्रकार के निर्माण के लिए जिम्मेदार हो सकता है है? या किसी भी अन्य तरीके से मैं प्लगइन से पी 2 भंडार का निर्माण कर सकता हूं जिसे मैवेन रिपोजिटरी में व्यक्तिगत रूप से बनाया और तैनात किया गया है?

बातें मैं कोशिश की है में शामिल हैं:

  • दोनों jar और eclipse-feature
  • स्पष्ट रूप से लक्ष्य मंच के लिए सुविधाओं को जोड़कर के रूप में Maven सुविधा depedencies specifiying,

    तरह

    ... <artifactId>target-platform-configuration</artifactId> <version>${tycho.version}</version> <configuration> <dependency-resolution> <extraRequirements> <requirement> <type>eclipse-feature</type> <id>my.prj.eclipse.project.feature</id> <versionRange>0.0.0</versionRange> </requirement> ...


निकटतम जो चीज़ मुझे एक सभ्य समाधान में मिली है, उसके पास बहु-मॉड्यूल टाइपो प्रोजेक्ट है जिसमें केवल भंडार और सुविधाएं शामिल हैं। सभी प्लग इन उच्च-स्तरीय पोम को जोड़ा गया नेक्सस से डाउनलोड कर रहे हैं, प्रत्येक सुविधा में शामिल किए जाने के लिए उपलब्ध और उत्पन्न भंडार में शामिल -

feature-project 
|- feature1 (eclipse-feature) 
|- feature2 (eclipse-feature) 
|- repository (eclipse-repository) 

इस बिल्डिंग काम करता है।

हालांकि यह आदर्श से बहुत दूर है क्योंकि अब मैं अपने प्लगइन के साथ तर्कसंगत रूप से अपनी सुविधाओं को स्टोर नहीं कर सकता; उन्हें अलग परियोजना पदानुक्रमों में होना चाहिए। mvn clean verify -pl :feature1,feature2,repository के साथ अलग-अलग सुविधाओं और भंडार को अलग करने का प्रयास करते हुए, Bug 380152 के कारण संभावित रूप से विफल हो जाता है।

क्या कोई बेहतर तरीका है? किसी भी तरह की सहायता कृतज्ञतापूर्वक स्वीकार की जाएगी।

बहुत धन्यवाद


(के रूप में एक अलग रूप में: mvn clean verify -Dtycho.localArtifacts=ignore साथ भंडार के निर्माण सफल होगा अगर सुविधाओं स्थानीय Maven भंडार में मौजूद हैं, और आप चेतावनी है कि कलाकृतियों किया जा रहा है नहीं दिखाया जाएगा स्थानीय रेपो से हल ... क्या यह एक बग है?)

+0

आपकी तरफ से टिप्पणी के बारे में: यदि दूरस्थ मैवेन रिपॉजिटरीज़ से पीओएम निर्भरता डाउनलोड की जाती है, और स्थानीय निर्माण से पी 2 मेटाडेटा/पी 2artifacts हैं, तो Tycho मानता है कि वे एक साथ हैं। यह वास्तव में एक बग है। – oberlies

उत्तर

7

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

pomDependencies = पर विचार केवल प्लग इन के लिए काम करता है:: इस कार्यशीलता के लिए उपयोग के मामले था

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

लेकिन टाइपो-निर्मित परियोजनाओं के बारे में क्या? ये मेवेन रिपोजिटरी में तैनात हो सकते हैं! हां, यह सच है, और यही कारण है कि मैंने पोम पर निर्भरता अवधारणा को बढ़ाने की कोशिश की ताकि आप जो करने की कोशिश कर रहे हैं उसे अनुमति दें। विचार यह था कि प्रत्येक बार टाइको लक्ष्य मंच के लिए पीओएम निर्भरता मानता है, यह भी जांचता है कि पी 2 इंडेक्स फाइल ...-p2metadata.xml और ...-p2artifacts.xml मौजूद है या नहीं।हालांकि यह एक बड़े प्रदर्शन दंड का अनुमान लगाने के लिए निकला क्योंकि यह आमतौर पर एक मैवेन रिपोजिटरी सर्वर के लिए बहुत लंबा लगता है कि यह पता लगाने के लिए कि एक आर्टिफैक्ट मौजूद नहीं है। तो रिमोट डाउनलोड अक्षम कर दिया गया था, और स्थानीय मेवेन रिपोजिटरी में एक लुक-अप के साथ प्रतिस्थापित किया गया था। इस तरह, दो टाइको बिल्ड -Dtycho.localArtifacts=ignore सेट कर सकते हैं और फिर भी स्थानीय मेवेन रिपोजिटरी के माध्यम से पीओएम में निर्दिष्ट कलाकृतियों का आदान-प्रदान करने में सक्षम होंगे।

इन कार्यान्वयन विवरणों को जानना, हम निम्नलिखित समाधान प्राप्त करते हैं: केवल भंडार से पीओएम निर्भरता को फीचर आर्टिफैक्ट में जोड़ने के बजाय, आपको p2metadata और p2artifacts फ़ाइलों पर निर्भरता जोड़ने की भी आवश्यकता है। उदाहरण:

<dependencies> 
    <dependency> 
     <groupId>myproject</groupId> 
     <artifactId>myproject.feature</artifactId> 
     <version>0.1.0-SNAPSHOT</version> 
    </dependency> 
    <dependency> 
     <groupId>myproject</groupId> 
     <artifactId>myproject.feature</artifactId> 
     <version>0.1.0-SNAPSHOT</version> 
     <classifier>p2metadata</classifier> 
     <type>xml</type> 
    </dependency> 
    <dependency> 
     <groupId>myproject</groupId> 
     <artifactId>myproject.feature</artifactId> 
     <version>0.1.0-SNAPSHOT</version> 
     <classifier>p2artifacts</classifier> 
     <type>xml</type> 
    </dependency> 
</dependencies> 

यह बनाता Maven भी इन p2 सूचकांक फ़ाइलों को डाउनलोड, इसलिए टाइको टाइको विरूपण साक्ष्य के रूप में मुख्य विरूपण साक्ष्य को पहचानता है। इस तरह, आप पीओएम निर्भरताओं के माध्यम से लक्षित प्लेटफार्म में एक ग्रहण-सुविधा भी प्राप्त कर सकते हैं - कम से कम लगभग: 0.22.0 के साथ, भंडार का निर्माण गुजरता है, लेकिन सुविधा .jar artifact गुम है। मैंने पहले ही इस मुद्दे को डीबग किया है, और यह easy to fix है।

स्पष्ट रूप से प्रत्येक वास्तविक निर्भरता के लिए तीन <dependency> तत्वों के साथ वाक्यविन्यास अच्छा नहीं है। इसे एक p2artifacts तत्व पर उबालना संभव होना चाहिए - लेकिन यह अधिक काम है। यदि आप इस सुविधा में रूचि रखते हैं, तो आप open an enhancement request in Tycho's issue tracker कर सकते हैं।

+0

oberlies, मैं आपके द्वारा प्रदान किए गए समाधान से पूरी तरह से रोमांचित हूं, पृष्ठभूमि में आपके द्वारा विस्तृत विवरण में गया है, और जिस फिक्स को आपने Tycho पर लागू किया है - जिसे मैंने चेक आउट किया है और सत्यापित किया है, अब पूरी तरह से काम करता है। जैसा कि आप सुझाव देते हैं, मैं इस प्रकार के समग्र निर्भरता का समर्थन करने के लिए टाइको के लिए क्या शामिल करूंगा, और जल्द ही इसके लिए एक वृद्धि अनुरोध बढ़ाऊंगा। इस के साथ मेरी मदद करने के लिए समय निकालने के लिए बहुत बहुत धन्यवाद। – ryanp

+0

सलाह के लिए धन्यवाद। Tycho 0.24.0 में यह आसानी से काम करता है - मेरा फिक्स लागू होता है मुझे लगता है। –

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