2011-07-13 10 views
22

मैं निर्भरता (जैसे जार या युद्ध पैकेजिंग) एक "नियमित" Maven 3 निर्माण में एक दूरस्थ ग्रहण p2 रिपोजिटरी से उपयोग करना चाहते हैं maven2 और m4e ऐसा प्रतीत होता है)।उपयोग निर्भरता का निर्माण? सब (एक स्थानीय Maven रेपो के लिए p2 रेपो परिवर्तित जो क्या OSGi-हैं- है बिना -

आदर्श रूप में, मैं सिर्फ http://maven.eclipse.org/nexus/ का उपयोग करेंगे, लेकिन वह नहीं (अभी तक?) कई बंडलों को शामिल करता है।

Maven के systemPath का उपयोग गिनती नहीं है!

उत्तर

20

ऐसा लगता है कि मैं अपने ही सवाल का एक और जवाब दे रहा हूँ ..

सबसे पहले, आप एक P2 रिपोजिटरी से एक बंडल पर निर्भरता को जोड़ने के लिए टाइको उपयोग कर सकते हैं:

  • कॉन्फ़िगर निर्माण tycho-maven-plugin का उपयोग करने के लिए।
  • एक P2 भंडार निर्दिष्ट करें। "ग्रहण-प्लगइन" करने के लिए
  • सेट पैकेजिंग।
  • अपने निर्माण के लिए एक प्रकट बनाएँ और आवश्यकता होती है-बंडल निर्भरता राज्य के लिए का उपयोग करें (जैसे org.eclipse.xsd)। बंडल-वर्जन को उसी संस्करण में भी सेट करें जिसे हमने pom.xml में हमारे निर्माण के लिए उपयोग किया था।

की कि आजमाइए करते हैं:

$ mvn dependency:tree 
[INFO] com.example:org.eclipse.xsd:eclipse-plugin:0.0.1 
[INFO] +- p2.eclipse-plugin:org.eclipse.xsd:jar:2.6.0.v20100914-1218:system 
[INFO] ... 
[INFO] \- p2.eclipse-plugin:org.eclipse.core.filesystem:jar:1.3.1.R36x_v20100727-0745:system 

हमारी निर्भरता सफलतापूर्वक P2 रिपोजिटरी से हल किया गया है। दुर्भाग्य से, हम अभी तक नहीं कर रहे हैं। निर्भरता को सिस्टम स्कोप के साथ जोड़ा गया है, जिसका अर्थ है कि यदि हम एक वेबपैप बनाते हैं जो हमारे निर्माण पर निर्भर करता है तो कलाकृतियों को शामिल नहीं किया जाएगा। कि हल करने के लिए, हम पहले कुछ निर्देशिका के लिए निर्भरता में निहित सभी वर्गों को फिर से पैकेज है कि निर्देशिका एक जार के रूप में खोल करेंगे और फिर और हमारे निर्माण के अंतिम विरूपण साक्ष्य के रूप में उपयोग।

पहले भाग (खोल) के लिए, हम हमारे निर्माण करने के लिए Maven-निर्भरता-प्लगइन जोड़ने और इसे कॉन्फ़िगर पैकेज चरण के दौरान अपने खोल निर्भरता लक्ष्य को चलाने के लिए। दूसरे भाग (री-पैकेजिंग) के लिए, हम हमारे निर्माण करने के लिए Maven-विधानसभा-प्लगइन जोड़ने और इसे कॉन्फ़िगर पैकेज चरण के दौरान अपने एकल लक्ष्य को चलाने के लिए। हमें एक कस्टम असेंबली डिस्क्रिप्टर बनाने और कॉन्फ़िगर करने की भी आवश्यकता है।

हमारे निर्माण अब 3 फ़ाइलें के होते हैं: pom.xml में निर्माण फ़ाइल:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.example</groupId> 
    <artifactId>org.eclipse.xsd</artifactId> 
    <version>0.0.1</version> 
    <packaging>eclipse-plugin</packaging> 
    <repositories> 
     <repository> 
      <id>helios</id> 
      <layout>p2</layout> 
      <url>http://download.eclipse.org/releases/helios</url> 
     </repository> 
    </repositories> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.eclipse.tycho</groupId> 
       <artifactId>tycho-maven-plugin</artifactId> 
       <version>0.12.0</version> 
       <extensions>true</extensions> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>unpack-dependencies</id> 
         <phase>package</phase> 
         <goals> 
          <goal>unpack-dependencies</goal> 
         </goals> 
         <configuration> 
          <outputDirectory>${project.build.directory}/dependency</outputDirectory> 
          <overWriteReleases>false</overWriteReleases> 
          <overWriteSnapshots>true</overWriteSnapshots> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <version>2.2.1</version> 
       <configuration> 
        <descriptors> 
         <descriptor>src/main/assembly/repackaged.xml</descriptor> 
        </descriptors> 
       </configuration> 
       <executions> 
        <execution> 
         <id>make-assembly</id> 
         <phase>package</phase> 
         <goals> 
          <goal>single</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

प्रकट में META-INF/MANIFEST.MF:

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: Ignored 
Bundle-SymbolicName: Ignored 
Bundle-Version: 0.0.1 
Require-Bundle: org.eclipse.xsd 
Bundle-Vendor: Ignored 

src में विधानसभा वर्णनकर्ता /main/assembly/repackaged.xml:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> 
    <id>repackaged</id> 
    <formats> 
     <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <fileSets> 
     <fileSet> 
     <directory>${project.build.directory}/dependency/</directory> 
     <outputDirectory>/</outputDirectory> 
     <useDefaultExcludes>true</useDefaultExcludes> 
     </fileSet> 
    </fileSets> 
</assembly> 

अब mvn पैकेज से सभी कोड शामिल एक जार फ़ाइल बनाएगा हमारे P2 निर्भरता,, एक उचित Maven विरूपण साक्ष्य के रूप में फिर से पैक तैयार एक अन्य परियोजना में एक निर्भरता के रूप में प्रयोग की जाने वाली।

$ jar tf target/org.eclipse.xsd-0.0.1-repackaged.jar 
org/eclipse/xsd/ecore/XSDEcoreBuilder$1.class 
org/eclipse/xsd/ecore/XSDEcoreBuilder$2.class 
org/eclipse/xsd/ecore/XSDEcoreBuilder$Comparator.class 
org/eclipse/xsd/ecore/XSDEcoreBuilder$EffectiveOccurrence.class 
org/eclipse/xsd/ecore/XSDEcoreBuilder.class 
+0

मुझे नहीं पता कि आप अपनी टिप्पणी के दूसरे भाग में राजनीतिक रूप से किस बात का जिक्र कर रहे हैं। लेकिन आम तौर पर, यदि आप Tycho का उपयोग नहीं करना चाहते हैं, तो आप आगे बढ़ें और इस प्रश्न के लिए गैर-टाइको उत्तर ढूंढें और इसे यहां पोस्ट करें। –

+0

इसमें एक कमी है: यदि आपका आईडीई टाइको/पी 2 (यानी नेटबीन्स) को समझ में नहीं आता है, तो यह कक्षा को कक्षा में जोड़ नहीं देगा और आपके पास स्वत: पूर्णता/नेविगेशन नहीं होगा, भले ही मेवेन के माध्यम से निर्माण वास्तव में काम करता है । –

+0

क्या आप कृपया मुझे कुछ ऐसी ही समस्या के साथ मदद कर सकते हैं? http://stackoverflow.com/questions/38099426/is-it-possible-to-resolve-dependencies-in-maven-plugin-from-p2-repo – Disha

0

एक और तरीका है बी 3 एग्रीगेटर उपयोग करने के लिए यहां दिए गए अनुसार एक Maven अनुरूप लेआउट में p2 रेपो को प्रतिबिंबित करें:

Consuming emf bundles from p2 with maven : b3

फिर एक मूल जार के रूप में प्रदान कर सकते हैं।

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