2013-04-26 5 views
7

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

यदि मैं मास्टर पीओएम मेवेन के साथ स्थापित करता हूं, परिणामी रिएक्टर बिल्ड ठीक काम करता है। सभी मॉड्यूल का निर्माण कर रहे हैं और स्थापना सफल होता है

हालांकि, अगर मैं आवेदन की अन्य प्लग-इन करने के लिए ग्रहण प्लगइन्स से एक अलग से, अपने निर्भरता निर्माण हल नहीं किया जा सकता है।

तीसरे पक्ष के पुस्तकालयों (जैसे ग्रहण मंच) के लिए निर्भरता काम ठीक लगते हैं। हमारे आवेदन के ग्रहण प्लगइन्स केवल उस प्रकार की निर्भरताओं के साथ सफलतापूर्वक निर्माण करते हैं।

सांत्वना उत्पादन निम्नलिखित है: सफल रिएक्टर निर्माण के कारण

[INFO] Resolving dependencies of MavenProject: com.mycompany.myproduct:com.mycompany.myproduct.gui.editors:1.8.15-SNAPSHOT @ /<path>/com.mycompany.myproduct.gui.editors/pom.xml 
[INFO] Cannot complete the request. Generating details. 
[INFO] Cannot complete the request. Generating details. 
[INFO] {osgi.ws=gtk, osgi.os=linux, osgi.arch=x86, org.eclipse.update.install.features=true} 
[ERROR] Cannot resolve project dependencies: 
[ERROR] Software being installed: com.mycompany.myproduct.gui.editors 1.8.15.qualifier 
[ERROR] Missing requirement: com.mycompany.myproduct.gui.editors 1.8.15.qualifier requires 'bundle com.mycompany.myproduct.preferences 1.8.15' but it could not be found 
[ERROR] 
[ERROR] Internal error: java.lang.RuntimeException: "No solution found because the problem is unsatisfiable.": ["Unable to satisfy dependency from com.mycompany.myproduct.gui.editors 1.8.15.qualifier to bundle com.mycompany.myproduct.preferences 1.8.15.", "Unable to satisfy dependency from com.mycompany.myproduct.gui.editors 1.8.15.qualifier to bundle com.mycompany.myproduct.gui.utils 1.8.15.", "No solution found because the problem is unsatisfiable."] -> [Help 1] 
org.apache.maven.InternalErrorException: Internal error: java.lang.RuntimeException: "No solution found because the problem is unsatisfiable.": ["Unable to satisfy dependency from com.mycompany.myproduct.gui.editors 1.8.15.qualifier to bundle com.mycompany.myproduct.preferences 1.8.15.", "Unable to satisfy dependency from com.mycompany.myproduct.gui.editors 1.8.15.qualifier to bundle com.mycompany.myproduct.gui.utils 1.8.15.", "No solution found because the problem is unsatisfiable."] 
     at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:168) 
     ... 

, सभी प्लगइन बनाता है हमारी कंपनी भंडार (हम Artifactory का उपयोग करें) में हैं। आर्टिफैक्टरी वेब ऐप में मैं स्पष्ट रूप से preferences प्लगइन का एक 1.8.15-SNAPSHOT निर्माण देखता हूं। हालांकि इस भंडार को एक्सेस नहीं किया जा रहा है।

भंडार जानकारी settings.xml फ़ाइल में निर्दिष्ट किया गया है। नोट माता पिता पोम सफलतापूर्वक कि भंडार से लिया गया है:

[INFO] Scanning for projects... 
Downloading: http://artifactory.buildnet.mycompany.com/artifactory/libs-snapshot-local/com/mycompany/myproduct/gui.parent/1.0-SNAPSHOT/maven-metadata.xml 
Downloaded: http://artifactory.buildnet.mycompany.com/artifactory/libs-snapshot-local/com/mycompany/myproduct/gui.parent/1.0-SNAPSHOT/maven-metadata.xml (594 B at 3.3 KB/sec) 

सेटिंग्स फ़ाइल की सामग्री है:

<settings> 
    <servers> 
    ... (only relevant for deploy) 
    </servers> 
    <mirrors> 
    <mirror> 
     <id>mycompany-remote-mirror</id> 
     <name>mycompany remote repositories mirror</name> 
     <url>http://artifactory.buildnet.mycompany.com/artifactory/remote-repos</url> 
     <mirrorOf>*,!eclipse*,!mycompany-snapshots,!mycompany-releases</mirrorOf> 
    </mirror> 
    </mirrors> 
    <profiles> 
    <profile> 
     <id>mycompany-default</id> 
     <repositories> 
     <repository> 
      <id>mycompany-snapshots</id> 
      <name>MyCompany snapshots repository</name> 
      <releases> 
      <enabled>false</enabled> 
      <updatePolicy>always</updatePolicy> 
      <checksumPolicy>warn</checksumPolicy> 
      </releases> 
      <snapshots> 
      <enabled>true</enabled> 
      <updatePolicy>always</updatePolicy> 
      <checksumPolicy>fail</checksumPolicy> 
      </snapshots> 
      <url>http://artifactory.buildnet.mycompany.com/artifactory/libs-snapshot-local</url> 
      <layout>default</layout> 
     </repository> 
     <repository> 
      <id>mycompany-releases</id> 
      <name>MyCompany releases repository</name> 
      <releases> 
      <enabled>true</enabled> 
      <updatePolicy>always</updatePolicy> 
      <checksumPolicy>warn</checksumPolicy> 
      </releases> 
      <snapshots> 
      <enabled>false</enabled> 
      <updatePolicy>never</updatePolicy> 
      <checksumPolicy>fail</checksumPolicy> 
      </snapshots> 
      <url>http://artifactory.buildnet.mycompany.com/artifactory/libs-release-local</url> 
      <layout>default</layout> 
     </repository> 
     </repositories> 
    </profile> 
    </profiles> 
    <activeProfiles> 
    <activeProfile>mycompany-default</activeProfile> 
    </activeProfiles> 
</settings> 

यह माता पिता पोम (ध्यान दें कि हमारी परियोजना में यह मास्टर से अलग किया जाता है पोम कि मॉड्यूल शामिल हैं):

इस प्रकार
<project ...> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.mycompany.myproduct</groupId> 
    <artifactId>gui.parent</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <properties> 
    <product-id>MyProduct</product-id> 
    <tycho.version>0.17.0</tycho.version> 
    <tycho-extras.version>0.17.0</tycho-extras.version> 
    <eclipse.version>juno</eclipse.version> 
    <eclipse.repo>http://download.eclipse.org/releases/${eclipse-version}</eclipse.repo> 
    </properties> 

    <distributionManagement> 
    ... 
    </distributionManagement> 

    <repositories> 
    <repository> 
     <id>eclipse</id> 
     <url>${eclipse.repo}</url> 
     <layout>p2</layout> 
    </repository> 
    </repositories> 

    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.eclipse.tycho</groupId> 
     <artifactId>tycho-maven-plugin</artifactId> 
     </plugin> 
     <plugin> 
     <groupId>org.eclipse.tycho</groupId> 
     <artifactId>target-platform-configuration</artifactId> 
     </plugin> 
     <plugin> 
     <groupId>org.eclipse.tycho</groupId> 
     <artifactId>tycho-source-plugin</artifactId> 
     </plugin> 
     <plugin> 
     <groupId>org.eclipse.tycho</groupId> 
     <artifactId>tycho-versions-plugin</artifactId> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-release-plugin</artifactId> 
     </plugin> 
    </plugins> 

    <pluginManagement> 
     <plugins> 
     <!-- PARENT PLUGINS --> 
     <plugin> 
      <groupId>org.eclipse.tycho</groupId> 
      <artifactId>tycho-maven-plugin</artifactId> 
      <version>${tycho.version}</version> 
      <extensions>true</extensions> 
     </plugin> 
     <plugin> 
      <groupId>org.eclipse.tycho</groupId> 
      <artifactId>target-platform-configuration</artifactId> 
      <version>${tycho.version}</version> 
      <configuration> 
      ... 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.eclipse.tycho</groupId> 
      <artifactId>tycho-source-plugin</artifactId> 
      <version>${tycho.version}</version> 
      ... 
     <plugin> 
      <groupId>org.eclipse.tycho</groupId> 
      <artifactId>tycho-versions-plugin</artifactId> 
      <version>${tycho.version}</version> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-release-plugin</artifactId> 
      <version>2.4.1</version> 
     </plugin> 
     <!-- END OF PARENT PLUGINS --> 

     <!-- DEFAULT PLUGINS --> 
     <plugin> 
      <groupId>org.eclipse.tycho</groupId> 
      <artifactId>tycho-compiler-plugin</artifactId> 
      <version>${tycho.version}</version> 
      <configuration> 
      <compilerArguments> 
       <inlineJSR/> 
       <enableJavadoc/> 
       <encoding>ISO-8859-1</encoding> 
      </compilerArguments> 
      </configuration> 
     </plugin> 
     <!-- END OF DEFAULT PLUGINS --> 

     <!-- OTHER PLUGINS --> 
     ... (maven-resources, tycho-surefire, tycho-p2, tycho-p2-director, 
      tycho-p2-repository, ...) 
     <!-- END OF OTHER PLUGINS --> 
     </plugins> 
    </pluginManagement> 
    </build> 
</project> 

दूसरों पर निर्भरता के साथ एक प्लगइन का pom.xml है के रूप में:

<project ...> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
    <groupId>com.mycompany.myproduct</groupId> 
    <artifactId>gui.parent</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    </parent> 
    <artifactId>com.mycompany.myproduct.gui.editors</artifactId> 
    <version>1.8.15-SNAPSHOT</version> 
    <packaging>eclipse-plugin</packaging> 
</project> 

और है कि एक ही प्लगइन का MANIFEST.MF फ़ाइल इस प्रकार है:

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: MyProduct Editors Plug-in 
Bundle-SymbolicName: com.mycompany.myproduct.gui.editors;singleton:=true 
Bundle-Version: 1.8.15.qualifier 
Bundle-Activator: com.mycompany.myproduct.gui.editors.Activator 
Bundle-ActivationPolicy: lazy 
Export-Package: com.mycompany.myproduct.gui.editors, 
com.mycompany.myproduct.gui.editors.logger, 
com.mycompany.myproduct.gui.editors.report 
Bundle-Vendor: MyCompany 
Bundle-RequiredExecutionEnvironment: JavaSE-1.6 
Require-Bundle: org.eclipse.ui.workbench;bundle-version="3.104.0", 
org.eclipse.core.runtime;bundle-version="3.8.0", 
org.eclipse.jface;bundle-version="3.8.0", 
com.mycompany.myproduct.preferences;bundle-version="1.8.15", 
com.mycompany.myproduct.gui.utils;bundle-version="1.8.15", 
org.eclipse.ui.workbench;bundle-version="3.104.0" 

उत्तर

7

टाइको अपनी निर्भरता को हल करने (क्योंकि Maven खजाने निर्भरता एक OSGi मालसूची में निर्दिष्ट हल करने के लिए पर्याप्त मेटाडाटा नहीं है) के लिए Maven खजाने में नहीं लगती है। इसके बजाए, टाइको को कलाकृतियों के लिए पी 2 भंडार की आवश्यकता है जो दूरस्थ से आएंगी।

तो आदेश रिएक्टर के कुछ हिस्सों के निर्माण के आपके उपयोग के मामले को कवर करने के लिए, आपको निम्न कार्य करने होंगे:

  • एक सीआई का निर्माण एक p2 भंडार है कि रिएक्टर से सभी कलाकृतियों को एकत्रित करती उत्पादन है, और एक स्थिर यूआरएल पर उस पी 2 भंडार को प्रकाशित करें।
  • कि पोम लेआउट p2 के साथ भंडार के रूप में सीआई निर्माण p2 भंडार कहते हैं अपनी परियोजना में एक प्रोफ़ाइल बनाएँ (सबसे सरल उपाय एक जेनकींस नौकरी उपयोग करने के लिए और URL के निर्माण के कार्यक्षेत्र में बताते हैं उपयोग करने के लिए है।) ।

इस तरह, इस परियोजना की कलाकृतियों भी का हिस्सा होगा एक मॉड्यूल के target platform भले ही आप एक ही समय में अन्य मॉड्यूल का निर्माण नहीं है।

+0

अफसोस की बात है, यह सही जवाब प्रतीत होता है। कोई विचार क्यों टाइपो मेरे स्थानीय मेवेन रेपो (जो कि पी 2 नहीं है) में कलाकृतियों को ढूंढ सकता है, लेकिन कंपनी मेवेन रिपोजिटरी पर नहीं? – tbacker

+2

टाइको आदेश अन्य स्थानीय रूप से निर्मित कलाकृतियों के खिलाफ निर्माण के उपयोग के मामले का समर्थन करने के [इस के लिए स्पष्ट समर्थन] (http://wiki.eclipse.org/Tycho/Target_Platform#Locally_built_artifacts) है। रिमोट रिपॉजिटरीज़ के लिए वही होता था, लेकिन यह [स्वाभाविक रूप से स्केल नहीं करता] (https://issues.sonatype.org/browse/TYCHO-335)। – oberlies

+0

हम वास्तव में नेक्सस मैवेन रिपोजिटरी का उपयोग करके यह स्वचालित रूप से काम कर रहे हैं। डिफ़ॉल्ट Maven भंडार जो हम भी p2 लेआउट में उसकी सामग्री (यूआरएल खजाने/MyProduct/.meta/p2 पर) प्रस्तुत करता है (यूआरएल खजाने/MyProduct पर उदा) हमारे टाइको निर्मित कलाकृतियों को तैनात करने की। हमारी परियोजना की रिपोजिटरी सूची में दोनों यूआरएल जोड़कर, यह बॉक्स से बाहर काम करता प्रतीत होता है! तैनात निर्भरताओं को स्थानीय भंडार '.2/रिपोजिटरी/पी 2/ओजीआई/बंडल' के भीतर एक अलग निर्देशिका में हल और डाउनलोड किया जाता है। – tbacker

1

मुझे लगता है कि आप बस Maven निर्देशांक के अलावा माता-पिता के लिए एक रिश्तेदार पथ प्रदान करने के लिए की जरूरत है। सापेक्ष पथ के बिना यह केवल तभी काम करता है जब माता-पिता पोम कम से कम आपके स्थानीय रेपो में है।

+0

भंडार कार्यों से माता-पिता प्राप्त कर रहा है। माता-पिता वहां पाए जा सकते हैं क्योंकि सेटिंग्स फ़ाइल में भंडार परिभाषित किए जाते हैं। मैं एक सापेक्ष पथ का उपयोग नहीं करता क्योंकि यह आपको हर बार पूरा आवेदन देखने के लिए मजबूर करता है। इसे भंडार से पुनर्प्राप्त करके, इसे हमेशा एक्सेस किया जा सकता है। – tbacker

+1

असल में, आप एक सापेक्ष पथ निर्दिष्ट करते हैं: यदि छोड़ा गया 'सापेक्षपाथ '' ..' पर डिफ़ॉल्ट है। लेकिन यह तब तक कोई समस्या नहीं है जब तक उस स्थान पर * अलग * पीओएम नहीं है, सापेक्ष पथ इंगित कर रहा है। – oberlies

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