2012-04-20 9 views
7

Muszę zbudować plugin Eclipse z Maven/Tycho, który ma zależności od innych stron trzecich. Jak osadzanie zależności nie jest jeszcze obsługiwany przez Tycho, ja podzielić na dwa projekty, jak następuje:Tycho: "Nie można zaspokoić zależności ..." podczas budowania za pomocą wielomodułowego rodzica

  • A-thirdparty: projekt z opakowania „wiązki”, zbudowany przez Maven-bundle-plugin, mających „Embed- Zależność instrukcja i eksportu wszystkich pakietów, które są wymagane przez wtyczkę 'a'
  • A: projekt z opakowania 'eclipse-plugin', używając Tycho-maven-plugin i Tycho docelowego od platformy wtyczka konfiguracji z pomDependencies ustawiona na consider.

Kiedy buduję je osobno (najpierw agregator trzeciej strony, potem sam projekt A), wszystko działa dobrze. Jednakże, jeśli zsumować oba te projekty (używając wielomodułowego POM), pojawia się następujący Maven błąd:

Caused by: java.lang.RuntimeException: "No solution found because the problem is unsatisfiable.": ["Unable to satisfy dependency from A 1.0.0.qualifier to package org.apache.axis2.transaction 0.0.0.", "Unable to satisfy dependency from A 1.0.0.qualifier to package org.apache.axis2.addressing.i18n 0.0.0.", ... 

Dlaczego projektów budowlanych w zagregowanym moda powoduje ten błąd, i jakiego rodzaju obejście mogłoby być możliwe, jeśli to jest błąd Tycho?

Chociaż nie ma błędu, jeśli zostawiam tylko jeden moduł agregacji POM (niezależnie od tego, który).

EDIT

nie można odtworzyć z małym, podobnym próbki wielomodułowego. Co oznacza, że ​​jest coś w mojej hierarchii POM.

EDIT2

była w stanie odtworzyć z małym, podobnym próbki wielomodułowego po tym sam zestaw zależnościami (kilka bibliotekami oś2 & aksjomatów).

Edit3: Minimalistic Przykład

Teraz zastanawiam się, czy problem jest o brakującym wszystkie thirdparties wymaganych przez thirdparty bibliotek ja zawartych. Jeśli tak, to dlaczego jestem w stanie budować pomyślnie, gdy oba moduły są uruchamiane osobno, a kompilacja kończy się niepowodzeniem tylko wtedy, gdy jest wykonywana przez nadrzędny, wielomodułowy pom.xml? Poniższy przykład zawiera tylko jeden pojedynczy JAR osi J2, zawarty w pom-pierwszym artefakcie o nazwie pierwsza trzecia strona.

Zamiast A, przykład ma keywoard first. Struktura folder jest następujący:

./pom.xml 
./first-thirdparty 
    pom.xml 
./first 
    src/main/java/org/mydemo/Test.java // has just one method that simply returns AxisFault.class.getSimpleName(); to test import resolution 
    META-INF/MANIFEST.MF 
    build.properties 
    pom.xml 

głównej POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
     http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>org.mydemo</groupId> 
    <artifactId>first-aggregator</artifactId> 

    <packaging>pom</packaging> 
    <version>1.0.0-SNAPSHOT</version> 


    <modules> 
     <module>first-thirdparty</module> 
     <module>first</module> 
    </modules> 

</project> 

POM od first-thirdparty. Po prostu osadza JAR osi2-jądra (żadnych innych bibliotek).)

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=   "http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 
    <parent> 
     <groupId>org.mydemo</groupId> 
     <artifactId>first-aggregator</artifactId> 
     <version>1.0.0-SNAPSHOT</version> 
     <relativePath>../pom.xml</relativePath> 
    </parent> 

    <properties> 
     <manifest-location>META-INF</manifest-location> 
    </properties> 

    <packaging>bundle</packaging> 

    <groupId>org.mydemo</groupId> 
    <artifactId>first-thirdparty</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 

    <dependencies> 
     <dependency> 
      <groupId>org.apache.axis2</groupId> 
      <artifactId>axis2-kernel</artifactId> 
      <version>1.5.1</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.felix</groupId> 
       <artifactId>maven-bundle-plugin</artifactId> 
       <extensions>true</extensions> 
       <configuration> 
        <instructions> 
         <Embed-Dependency> 
          axis2-kernel 
         </Embed-Dependency> 
         <_exportcontents> 
          org.apache.axis2.*;version="1.5.1" 
         </_exportcontents> 
         <Bundle-ClassPath>{maven-dependencies}</Bundle-ClassPath> 
         <Embed-Transitive>true</Embed-Transitive> 
         <Embed-Directory>jars</Embed-Directory> 
         <_failok>true</_failok> 
         <_nouses>true</_nouses> 
        </instructions> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

</project> 

POM od first, który jest Eclipse wtyczki i zależy first-thirdparty:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
     http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
     <groupId>org.mydemo</groupId> 
     <artifactId>first-aggregator</artifactId> 
     <version>1.0.0-SNAPSHOT</version> 
     <relativePath>../pom.xml</relativePath> 
    </parent> 

    <groupId>org.mydemo</groupId> 
    <artifactId>org.mydemo.first-bundle</artifactId> 

    <packaging>eclipse-plugin</packaging> 
    <version>1.0.0-SNAPSHOT</version> 

    <properties> 
     <tycho.ver>0.14.1</tycho.ver> 
    </properties> 

    <repositories> 
     <repository> 
      <id>helios</id> 
      <layout>p2</layout> 
      <url>http://download.eclipse.org/releases/indigo</url> 
     </repository> 
    </repositories> 

    <dependencies> 
     <dependency> 
      <groupId>org.mydemo</groupId> 
      <artifactId>first-thirdparty</artifactId> 
      <version>1.0.0-SNAPSHOT</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.eclipse.tycho</groupId> 
       <artifactId>tycho-maven-plugin</artifactId> 
       <version>${tycho.ver}</version> 
       <extensions>true</extensions> 
      </plugin> 
      <plugin> 
       <groupId>org.eclipse.tycho</groupId> 
       <artifactId>target-platform-configuration</artifactId> 
       <version>${tycho.ver}</version> 
       <configuration> 
        <pomDependencies>consider</pomDependencies> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

MANIFEST.MF modułu first; to wyraźnie importuje wszystkie pakiety oś2-jądra:

Manifest-Version: 1.0 
Bundle-Version: 1.0.0.qualifier 
Tool: Bnd-0.0.357 
Bundle-Name: first-bundle 
Bnd-LastModified: 1334819004300 
Created-By: 1.6.0_25 (Sun Microsystems Inc.) 
Bundle-ManifestVersion: 2 
Bundle-SymbolicName: org.mydemo.first-bundle 
Export-Package: org.mydemo 
Import-Package: org.apache.axis2.clustering.context, 
org.apache.axis2.modules, 
org.apache.axis2.deployment.util, 
org.apache.axis2.dataretrieval.client, 
org.apache.axis2.clustering, 
org.apache.axis2.wsdl.util, 
org.apache.axis2.clustering.configuration, 
org.apache.axis2.java.security, 
org.apache.axis2.deployment.resolver, 
org.apache.axis2.util, 
org.apache.axis2.wsdl, 
org.apache.axis2.addressing.metadata, 
org.apache.axis2.i18n, 
org.apache.axis2.deployment.scheduler, 
org.apache.axis2.dataretrieval, 
org.apache.axis2.dispatchers, 
org.apache.axis2.transport,org.apache.axis2.service, 
org.apache.axis2.deployment.repository.util, 
org.apache.axis2.client, 
org.apache.axis2.context, 
org.apache.axis2.classloader, 
org.apache.axis2.receivers, 
org.apache.axis2.engine, 
org.apache.axis2.addressing, 
org.apache.axis2.deployment, 
org.apache.axis2.transport.http, 
org.apache.axis2.phaseresolver, 
org.apache.axis2.context.externalize, 
org.apache.axis2.transaction, 
org.apache.axis2.description, 
org.apache.axis2.addressing.wsdl, 
org.apache.axis2.transport.http.util, 
org.apache.axis2.util.threadpool, 
org.apache.axis2, 
org.apache.axis2.handlers, 
org.apache.axis2.addressing.i18n, 
org.apache.axis2.builder, 
org.apache.axis2.description.java2wsdl, 
org.apache.axis2.builder.unknowncontent, 
org.apache.axis2.namespace, 
org.apache.axis2.description.java2wsdl.bytecode, 
org.apache.axis2.client.async, 
org.osgi.framework;version="1.3.0" 
Bundle-Localization: plugin 
+0

To pomaga nam pokazać swój główny pom.xml jak co nakazuje ci” ponownie wywołuje Mavena z. – SpellingD

+0

@SpellingD Ok, wstawię próbkę kodu, ponieważ udało mi się zminimalizować kod. –

+0

@SpellingD Nie ma zbyt wiele kodu, ale rozważam przeniesienie go do niektórych pamięci współużytkowania. Jeśli możesz zaproponować jedną, zrób to. Zastanawiam się teraz, czy problem dotyczący tych zależności Axis2 nie jest uwzględniony, a to wpływa na proces kompilacji. Jednak jestem w stanie zbudować te moduły osobno, więc zastanawiam się, co jest złego w agregowaniu ich za pomocą wielomodułowego rodzica. –

Odpowiedz

11

Nie jest możliwe, aby zbudować „POM-first” zestawy (czyli pakiety zbudowane z maven-bundle-plugin) i „manifest-pięści” paczki (czyli wiązek zbudowany przez Tycho) w tym samym reaktorze. To jest known limitation in Tycho.

Powodem jest to, że Tycho zbyt wcześnie rozwiązuje swoją zależność w cyklu życia Maven, gdy wtyczka maven-bundle nie ma jeszcze szansy na wygenerowanie Manifestu (potrzebne Tycho). Rozwiązanie tego problemu wymaga quite large changes, ale nadal mam nadzieję, że uda się to zrobić w perspektywie średnioterminowej.

+0

Dzięki, to jest naprawdę cenny komentarz. Postaram się jak najszybciej otworzyć zgłoszenie, ponieważ jesteśmy zainteresowani działaniem tej sprawy w ramach jednej wersji. Przyjmuję twoją odpowiedź, ponieważ jasno wyjaśnia przyczynę mojego problemu. –

1

ja po prostu sam issue.I mi rozwiązać mój problem w ten sposób nadzieję, że to pomoże Ci

1 powód, dla którego pojawia się błąd to dlatego, że brak słoików wtyczki. na przykład w twoim przypadku: "Powodowane przez: java.lang.RuntimeException:" Nie znaleziono rozwiązania, ponieważ problem jest niezadowalający. ": [" Nie można zaspokoić zależności od wersji 1.0.0.qualifier, aby spakować plik org.apache.axis2.transaction 0.0.0. "," Wystarczy spojrzeć na pierwszy, nie masz "org.apache.axis2.transaction 0.0.0." W twoim maven repozytorium. Szczerze mówiąc, nie jestem pewien, jaki jest używany jar i jak go zdobyć, po prostu brakowało mi zależności od innej wersji eclipse, więc potrzebuję słoika w/eclipse/plugins Więc to, co robisz, to tworzenie p2 repozytorium. Oto kolejny facet, który tuż link jak wykorzystać skrypt do tworzenia repozytorium P2 http://maksim.sorokin.dk/it/2010/11/26/creating-a-p2-repository-from-features-and-plugins/

2 umieścić to repozytorium w ur pliku pom maven

<repository> 
     <id>localP2resp</id> 
     <url>file:///F:/P2Repository</url> 
     <layout>p2</layout> 
    </repository> 

3 Do tej pory trzeba rozwiązać problem, jeśli masz plugin słoiki, które trzeba w ty P2repository

jeśli masz jakieś inne pytanie, czy nie tak satify z odpowiedzią kopalni, padają thx

Powiązane problemy