2012-05-03 12 views
9

हमारे पास बहुत से घटक हैं जिनमें से हम केवल कुछ ही शुरू करने के लिए मॉड्यूलर करना चाहते हैं। इन सभी घटकों में से बंडल बनाने के लिए सबसे अच्छा तरीका क्या है (मेरे निर्माण पर्यावरण के संदर्भ में)?मौजूदा जावा परियोजनाओं को ओजीआई बंडलों में परिवर्तित करने का सबसे अच्छा तरीका

मेरे पर्यावरण: जावा 6, Maven 2.2.1, हडसन

टेक्नोलॉजीज: स्प्रिंग 3.0.5, WebSphere 7, 3.2.x हाइबरनेट और Apache Commons के सबसे।

आवश्यकताओं

  1. modularize केवल कुछ घटकों। शेष घटक सभी संकुल निर्यात कर सकते हैं। (: ग्रहण यह करने के लिए प्रतीत नहीं होता mvn ग्रहण)

उत्तर

9

केवल MANIFEST.MF प्रविष्टियों को बदलकर प्रारंभ करें जैसे कि आपके सभी कलाकृतियों को बंडल बनें - वे स्पष्ट रूप से जादुई रूप से काम नहीं करेंगे लेकिन यह एक अच्छा विनाशकारी पहला कदम है।

Maven गठरी-प्लगइन का उपयोग करते समय, सुनिश्चित करें कि आप extensions और supportedProjectTypes सेट के रूप में आप समस्या हो सकती है सीआई बनाता है के साथ Maven रेपोस और m2e नाकाम रहने अगर पैकेजिंग प्रकार bundle (अंत देखें)।

अपने जोखिम भरा/कोर बाहरी निर्भरताओं को जल्दी से जांचें - उदाहरण के लिए यदि आप दृढ़ता के लिए जेपीए का उपयोग कर रहे हैं तो सुनिश्चित करें कि प्रदाता आपके डोमेन बंडल और जेडीबीसी ड्राइवर के साथ ओएसजीआई पर्यावरण में काम करता है।

यदि आप करफ या कन्या में जावा ईई/वसंत देखो से माइग्रेट कर रहे हैं। लेकिन यदि आपके घटक एम्बेडेड सिस्टम के लिए हैं या कोई बाहरी निर्भरता नहीं है तो फ़ेलिक्स या विषुव पर्याप्त हो सकता है (हालांकि यदि यह मामला है तो pax-url प्रोजेक्ट देखें)।

डोमेन/प्रौद्योगिकियों के बारे में थोड़ा और विशिष्ट होने के लिए अपने प्रश्न को संपादित करने लायक हो सकता है?


ग्रहण: ग्रहण केवल उत्पन्न करता है कि जब परियोजना पहले कॉन्फ़िगर किया गया है, m2e के जीवनचक्र समस्याओं दर्द का एक सा हो सकता है, लेकिन यह अब तक पुराने ग्रहण प्लग का उपयोग करने से बेहतर है।


निम्नलिखित आपके मौजूदा कलाकृतियों में किसी भी अन्य तरीके से बिना प्रकट किए मैनिफेस्ट प्रविष्टियां जोड़ देगा। यह मैवेन-बंडल-प्लगइन द्वारा उत्पन्न MANIFEST.MF का उपयोग करने के लिए मानक मेवेन जार और युद्ध प्लगइन्स को बताता है।

माता पिता पोम में रखें यह:

<pluginManagement> 
<plugin> 
    <groupId>org.apache.felix</groupId> 
    <artifactId>maven-bundle-plugin</artifactId> 
    <version>2.3.7</version> 
    <extensions>true</extensions> 
    <configuration> 
     <archive> 
      <addMavenDescriptor>true</addMavenDescriptor> 
     </archive> 
     <supportedProjectTypes> 
      <supportedProjectType>jar</supportedProjectType> 
      <supportedProjectType>war</supportedProjectType> 
     </supportedProjectTypes> 
     <instructions> 
      <Built-By>${project.organization.name}</Built-By> 
      <Bundle-Vendor>${project.organization.name}</Bundle-Vendor> 
      <Bundle-ContactAddress>${project.organization.url}</Bundle-ContactAddress> 
      <Bundle-Description>${project.description}</Bundle-Description> 
      <Bundle-DocURL>${bundle.doc.url}</Bundle-DocURL> 
      <Bundle-Category>${bundle.category}</Bundle-Category> 
      <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> 
      <Bundle-Version>${project.version}</Bundle-Version> 

      <Import-Package>*</Import-Package> 
      <Export-Package>*</Export-Package> 
     </instructions> 
    </configuration> 
    <executions> 
     <execution> 
      <id>bundle</id> 
      <goals> 
       <goal>manifest</goal> 
      </goals> 
      <phase>prepare-package</phase> 
      <inherited>true</inherited> 
     </execution> 
    </executions> 
</plugin> 

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.3.1</version> 
    <configuration> 
     <archive> 
      <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile> 
     </archive> 
    </configuration> 
</plugin> 

<plugin> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.1.1</version> 
    <executions> 
     <execution> 
      <id>create-war</id> 
      <phase>package</phase> 
      <goals> 
       <goal>war</goal> 
      </goals> 
      <inherited>true</inherited> 
     </execution> 
    </executions> 
    <configuration> 
     <archive> 
      <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile> 
     </archive> 
    </configuration> 
</plugin> 
</pluginManagement> 
तो बच्चे poms में

, तो आप बस कर सकते हैं:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>maven-bundle-plugin</artifactId> 
     </plugin> 
     <!-- Below is mutually exclusive: Either jar or war plugin --> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 
+0

के साथ काफी बेहतर माइलेज होगा मेरे पास इन कुछ बंडलों को चलाने के दो विकल्प हैं 1) एम्बेडेड अपाचे फ़ेलिक्स बुद्धिमान WAR 2) Witin WAB –

+0

मैंने अपनी पोस्ट को तकनीकों के साथ अपडेट किया है। क्या आपने टाइको की कोशिश की है? –

+0

बहुत जानकारीपूर्ण पोस्ट - पीओएम सामग्री विशेष रूप से उपयोगी है, धन्यवाद कानकैम। उपयोगकर्ताओं को ध्यान दें: यदि आप एक जेएआर पर चल रहे हैं तो आपको मेवेन-वॉर-प्लगइन सेक्शन पर टिप्पणी करनी होगी, अन्यथा पैकेज लक्ष्य विफल हो जाएगा। – KomodoDave

3

उपयोग maven bundle plugin

  • जब ग्रहण में आयात किया, मैं निर्माण रास्ते में निर्भरता के रूप में आयात-संकुल के बंडलों को देखने के लिए सक्षम होना चाहिए। यह आपके कोड को स्कैन करने और पोम में परिभाषित निर्भरताओं के आधार पर आपके लिए आवश्यक आयात और निर्यात विवरण जोड़ देगा। इसे बदलने के लिए कम से कम प्रयास की आवश्यकता होगी।

    मैं आपको एमवीएन ग्रहण के बजाय M2Eclipse का उपयोग करने की भी सलाह देता हूं: ग्रहण। यह आपके मेवेन कॉन्फ़िगरेशन और वर्कस्पेस को सिंक में रखेगा।

  • +0

    लेकिन m2eclipse maven 3 के साथ आता है। –

    +1

    यह कॉन्फ़िगर करने योग्य है, आप इसे बाहरी स्थापना में सेट कर सकते हैं - मेवेन 2 के साथ काम कर सकता है। लेकिन आपके पास m2e और maven-bundle-plugin – earcam

    4

    bndtools पर एक नजर डालें, तो यह परियोजनाओं है कि चादर बनाने के लिए उत्कृष्ट समर्थन हासिल है बंडल। यह बहुत अंतर्दृष्टि प्रदान करता है कि कैसे JARs संरचित होते हैं और वे अन्य चीजों पर निर्भर करते हैं।

    +0

    क्या bndtools जेनरेट किए गए जार स्वचालित रूप से मैवेन रिपॉजिटरी में ले जाते हैं? या जार को mvn repo में कैसे स्थानांतरित किया जा सकता है? –

    +0

    अभी पुराना है, लेकिन शायद आपके संबद्धता को bndtools – Flexo

    +0

    के साथ प्रकट करने के लायक क्यों है? यह आवश्यक क्यों होगा? Bndtools कोई उत्पाद नहीं है? –

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

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