2011-09-13 13 views
5

मेरे पास एक ओएसजीआई बंडल है जिसे मैवेन का उपयोग किसी अन्य टीम द्वारा किया गया था। पीओएम फ़ाइल अपनी पैकेजिंग को "बंडल" के रूप में घोषित करती है और अपाचे फ़ेलिक्स प्लगइन का उपयोग करती है।तैनाती के साथ मेवेन रेपो में ओएसजीआई बंडल को कैसे तैनात करें: तैनाती फ़ाइल?

मुझे इस आर्टिफैक्ट को स्थानीय मैवेन रिपोजिटरी (नेक्सस) में तैनात करने की आवश्यकता है ताकि इसका उपयोग हमारी आंतरिक परियोजनाओं द्वारा किया जा सके।

मैंने deploy:deploy-file का उपयोग भंडार में बंडल को तैनात करने के लिए किया है, जैसा कि आप एक मानक JAR फ़ाइल के साथ करेंगे और यह बिना त्रुटि के काम करता है। मैं बंडल से एम्बेडेड पोम निकाला जाता है और कमांड लाइन को पारित कर दिया है, तो कमांड लाइन था:

mvn deploy:deploy-file -Dfile=3rdpartybundle.jar -DpomFile=pom.xml -DrepositoryId=internal -Durl=http://internalserver/nexus 

मुद्दा जब मैं इसे इस तरह की तैनाती, पैकेजिंग बंडल करने के लिए निर्धारित है कि है और इसके परिणामस्वरूप भंडार में आर्टिफैक्ट का नाम .jar एक्सटेंशन के बजाय, एक। बंडल एक्सटेंशन के साथ समाप्त होता है।

अब, हम यह नहीं समझ सकते कि इसे निर्भरता के रूप में कैसे घोषित किया जाए। अगर हम इसे इस तरह घोषित करते हैं:

 <dependency> 
      <groupId>...</groupId> 
      <artifactId>...</artifactId> 
      <version>...</version> 
      <type>bundle</type> 
     </dependency> 

हमें यह बताते हुए एक त्रुटि मिलती है कि निर्भरता को हल नहीं किया जा सकता है। दिलचस्प बात यह है कि त्रुटि संदेश में जीएवी निर्देशांक वास्तव में "जार" निर्भरता के प्रकार के लिए मूल्य के रूप में है, भले ही हम इसे "बंडल" के रूप में सेट करते हैं।

हम करने के लिए निर्भरता को बदलते हैं:

 <dependency> 
      <groupId>...</groupId> 
      <artifactId>...</artifactId> 
      <version>...</version> 
      <type>jar</type> 
     </dependency> 

हम ठीक उसी अनसुलझे निर्भरता त्रुटि मिलती है।

तो आप एक मैवेन रिपोजिटरी में बंडल के रूप में पैक किए गए आर्टिफैक्ट को कैसे तैनात करना चाहते हैं, ताकि इसे किसी अन्य प्रोजेक्ट के लिए संकलन समय निर्भरता के रूप में उपयोग किया जा सके?

धन्यवाद

+0

मुझे एहसास है कि "स्थानीय भंडार" शब्द का उपयोग भ्रमित हो रहा है। मैं रिमोट सर्वर पर एक नेक्सस भंडार में तैनाती करने की कोशिश कर रहा हूं। सर्वर हमारी टीम पर सभी द्वारा साझा किया जाता है। जब मैंने "स्थानीय" कहा, मुझे लगता है कि मेरा मतलब था "हमारे लैन पर हमारे फ़ायरवॉल के अंदर"। –

उत्तर

0

उत्तर के लिए धन्यवाद, मुझे लगता है कि मेरे पास एक कामकाज है (मैं इसे समाधान नहीं कहूंगा हालांकि)।

@earcar सही रास्ते पर है, हालांकि यह समाधान pom.xml में उपलब्ध सभी जानकारी का लाभ नहीं उठाता है जो पहले से ही (विशेष रूप से निर्भरता) तृतीय पक्ष बंडल में उपलब्ध है। तैनाती फ़ाइल एक छोटे से अस्पष्ट है कि आप एक ही समय में एक pom.xml फ़ाइल और पैकेजिंग पैरामीटर भी सेट से पारित सकता है:

तो क्या हुआ, काम करने के लिए लगता है, भले ही तैनाती के लिए दस्तावेज़। तो मेरी कमांड लाइन अब इस तरह दिखता है:

mvn deploy:deploy-file -Dfile=3rdpartybundle.jar -DpomFile=pom.xml -DrepositoryId=internal -Durl=http://internalserver/nexus -Dpackaging=jar 

यह इस तरह से कर रहा, भंडार में pom.xml अभी भी कहना है कि पैकेजिंग प्रकार के "समूह" को है, और निर्भरता आदि के सभी शामिल है, लेकिन आर्टिफैक्ट में एक .jar फ़ाइल एक्सटेंशन है।

फिर जब हम प्रकार जार के रूप में हमारी निर्भरता की घोषणा, Maven इसे सफलतापूर्वक हल करने में सक्षम है:

<dependency> 
     <groupId>...</groupId> 
     <artifactId>...</artifactId> 
     <version>...</version> 
     <type>jar</type> 
    </dependency> 

यह मूलतः हमारे समस्या का हल। मुझे यकीन नहीं है कि यह पोर्टेबल या भरोसेमंद हालांकि है। एफडब्ल्यूआईडब्ल्यू, हम मेवेन 3.0.3

सहायता के लिए धन्यवाद चला रहे हैं।

0

आप चाहते हो सकता है प्रकार पूरी तरह से हटाने की कोशिश करने के लिए, और फिर एक सरल

mvn install 

कर निर्देशिका अपने pom.xml फ़ाइल युक्त हैं।

+0

लेकिन यह केवल स्थानीय मैवेन रेपो में आर्टिफैक्ट स्थापित करेगा ... –

+0

आह हाँ, मैं देखता हूं। मैंने सोचा था कि आप स्थानीय रेपो का जिक्र कर रहे थे, लेकिन एक सेकंड पर यह स्पष्ट हो गया कि आप नेक्सस का मतलब है। मेरे नेक्सस पर्यावरण में हम उन्हें तैनात करने के लिए बैश खोल स्क्रिप्ट का उपयोग करते हैं। इसलिए, मैं बस इतना ही दिलचस्पी ले रहा हूं कि समाधान क्या है! –

+0

सही, हमें निश्चित रूप से संपूर्ण टीम द्वारा साझा किए गए रिमोट रिपोजिटरी को चलाने वाले रिमोट रिपोजिटरी पर तैनाती करने की आवश्यकता है। –

0

सबसे पहले, आपने अपने बंडल फ़ोल्डर में mvn deploy को केवल आमंत्रित करने का प्रयास किया है। मैं उम्मीद करता हूं कि distributionManagement को आपके नेक्सस पर तैनात करने के लिए कॉन्फ़िगर किया गया है, तो बंडल हो जाता है, बनाता है, परीक्षण और तैनात किया जाता है।
यदि यह विफल हो जाता है तो आप होस्टेड रिपोजिटरी में नेक्सस वेब इंटरफ़ेस का उपयोग करके मैन्युअल रूप से बंडल आयात कर सकते हैं।

+0

मुझे लगता है कि आप बिंदु चूक गए हैं। यह स्थापित नहीं हो रहा है कि समस्या है, यह बंडल प्लगइन द्वारा उपयोग किया जाने वाला प्रकार "बंडल" है। – Robin

+0

लेकिन अपने प्रश्न में उन्होंने "3rdpartybundle.jar" कहा जो मुझे लगता है कि प्रोजेक्ट का आर्टिफैक्ट, "बंडल" के रूप में पैक किया गया है, एक जार फ़ाइल है। और जहां तक ​​मैं अपाचे फ़ेलिक्स बंडल प्लगइन वेबसाइट पर देख सकता हूं, यह आर्टिफैक्ट के रूप में एक जार फ़ाइल बनाता है। तो अगर आर्टिफैक्ट को ".bundle" के रूप में तैनात किया जाता है तो मैं जांचता हूं कि कोई अन्य प्लगइन कॉन्फ़िगर किया गया है जो तैनाती से पहले आर्टिफैक्ट का नाम बदल सकता है। –

+0

बंडल किसी अन्य कंपनी की एक टीम से है। हमारे पास स्रोत नहीं है आदि। हम पहले से निर्मित बंडल को तैनात करने की कोशिश कर रहे हैं। –

3

मुद्दा यह है कि "3rdpartybundle.jar" एक्सटेंशन = सच और/या समर्थित प्रकार की स्थापना के बिना बनाया जा रहा है है:

<plugin> 
    <groupId>org.apache.felix</groupId> 
    <artifactId>maven-bundle-plugin</artifactId> 
... 
    <extensions>true</extensions> 
... 
    <configuration> 
     <supportedProjectTypes> 
      <supportedProjectType>jar</supportedProjectType> 
      <supportedProjectType>war</supportedProjectType> 
     </supportedProjectTypes> 

आपको लगता है कि नदी के ऊपर ठीक नहीं कर सकते हैं, तो कुछ विकल्प होते है;

1) एक नई परियोजना पोम का उपयोग कर एक जार के रूप में यह Repack:

    <plugin> 
          <groupId>org.apache.maven.plugins</groupId> 
          <artifactId>maven-dependency-plugin</artifactId> 
          <version>2.3</version> 
          <configuration> 
            <actTransitively>false</actTransitively> 
            <outputDirectory>target/classes</outputDirectory> 
            <artifactItems> 
              <artifactItem> 
                <groupId>3rd</groupId> 
                <artifactId>party</artifactId> 
                <version>X.Y.Z</version> 
              </artifactItem> 
            </artifactItems> 
          </configuration> 
          <executions> 
            <execution> 
              <goals> 
                <goal>unpack</goal> 
              </goals> 
              <phase>compile</phase> 
            </execution> 
          </executions> 
        </plugin> 

2) -DgeneratePom=false -Dpackaging=jar -Dfile=/path/to/3rdpartybundle.jar साथ लेकिन -DpomFile= निर्दिष्ट किए बिना mvn deploy:deploy-file उपयोग करने का प्रयास - आशा है कि वहाँ के अंदर कोई META-INF/Maven/pom.xml है 3rdpartybundle।जार - इसे इसका उपयोग करना चाहिए, लेकिन आपको समूह आईडी/artifactId/संस्करण पैरामीटर निर्दिष्ट करने की आवश्यकता होगी क्योंकि ये प्रोजेक्ट के पोम से नहीं ली जाएंगी।

मुझे पता है कि मैंने अतीत में बंडल कलाकृतियों का निर्माण किया है और इन्हें हमारे नेक्सस (v1.9.0.1) में तैनात किया है और स्प्रिंग रेपो में उन लोगों को भी बंडल टाइप किया गया है, लेकिन किसी भी मुद्दे को याद नहीं है। (संयोग से आपको निर्भरता घोषणाओं में बंडल निर्दिष्ट करने की आवश्यकता नहीं है, AFAIK यदि यह एकमात्र आर्टिफैक्ट है जिसे अनुमानित किया जाना चाहिए)

+0

मैं "बंडल" पैकेजिंग के साथ पैक की गई फ़ाइलों को तैनात करने की कोशिश कर रहा एक समान समस्या में भाग गया। "-DgeneratePom = false -Dpackaging = jar" मुझे आवश्यक जादू था। धन्यवाद। – Jared