2012-04-20 2 views
7

Devo creare un plug-in Eclipse con un Maven/Tycho che abbia dipendenze da altre terze parti. Incorporino dipendenze non è ancora supportato da Tycho, ho diviso progetti in due come segue:Tycho: "Impossibile soddisfare la dipendenza ..." durante la creazione di un genitore multi-modulo

  • A-thirdparty: progetto con un packaging 'fascio', costruito da Maven-fascio-plug, aventi 'Embed- dipendenza' istruzione, e l'esportazione di tutti i pacchetti che sono richiesti da un plugin 'a'
  • A: progetto con un packaging 'eclipse-plugin', utilizzando Tycho-maven-plugin, e target dalla piattaforma di Tycho plug-in di configurazione con pomDependencies impostato su consider.

Quando li costruisco separatamente (inizialmente, aggregatore di terze parti, quindi progetto A stesso), tutto funziona correttamente. Tuttavia, se aggregare entrambi i progetti (utilizzando multi-modulo POM), ottengo il seguente Maven ERRORE:

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.", ... 

Perché i progetti di costruzione in modo aggregato causa questo errore, e che tipo di soluzione potrebbe essere possibile se quello è un bug di Tycho?

Tuttavia, non vi è alcun errore se lascio solo un modulo in POM di aggregazione (indipendentemente quale).

EDIT

non può riprodurre con un piccolo, campione di multi-modulo simile. Il che significa che c'è qualcosa nella mia gerarchia POM.

EDIT2

era in grado di riprodurre con un piccolo campione di multi-modulo simile, dopo compresa stesso insieme di dipendenze (coppia di librerie axis2 & axiom).

Edit3: Minimalistic Esempio

Ora mi chiedo se il problema è di perdere tutti i terzi si crea richiesti dal librerie di terze parti sono inclusi. Se è così, allora perché sono in grado di creare con successo quando eseguo entrambi i moduli separatamente, e la compilazione fallisce solo quando viene eseguita tramite padre, multi-module pom.xml? L'esempio di seguito include solo un JAR a singolo asse 2-kernel, raggruppato in un artefatto primo pomer denominato primo-terzo componente.

Invece di A, l'esempio dispone di keywoard first. La struttura della cartella è la seguente:

./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 

Root 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 di first-thirdparty. Incorpora semplicemente JAR del kernel di asse2 (non ci sono altre librerie ...):

<?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 di first, che è un eclisse-plugin, e dipende 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 del modulo first; importa esplicitamente tutti i pacchetti di axis2-kernel:

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

sarebbe utile per mostrarci il vostro pom.xml maestro così come quello che si comanda' invocando Maven con. – SpellingD

+0

@SpellingD Ok, inserirò l'esempio del codice, dato che sono riuscito a minimizzare il codice. –

+0

@SpellingD Non c'è molto codice, ma sto considerando di spostarlo in un archivio di condivisione. Se puoi suggerirne uno, per favore fallo. Mi chiedo ora, se il problema relativo alle dipendenze di Axis2 non è incluso, e questo riguarda il processo di compilazione. Tuttavia, sono in grado di creare questi moduli separatamente, quindi mi chiedo cosa c'è di sbagliato nell'aggregarli tramite genitore multi-modulo. –

risposta

11

Non è possibile costruire bundle "POM-first" (cioè fasci costruite con Maven-fascio-plugin) e bundle "MANIFESTO-Fist" (vale a dire fasci costruito da Tycho) nello stesso reattore. Questo è un known limitation in Tycho.

Il motivo è che Tycho fa la sua risoluzione delle dipendenze troppo presto nel ciclo di vita di Maven quando il plugin di maven-bundle non ha ancora avuto la possibilità di generare il Manifest (necessario per Tycho). Affrontare questo problema richiede quite large changes, ma spero ancora di farlo a metà percorso.

+0

Grazie, questo è un commento davvero prezioso. Mi assicurerò di aprire la richiesta il prima possibile, poiché siamo interessati a far funzionare questo caso all'interno di una singola build. Sto accettando la tua risposta in quanto spiega chiaramente la causa del mio problema. –

1

ho appena ottenere stesso issue.I ho risolvere il mio problema in questo modo spero che questo avrebbe aiutato a

1 la ragione si ottiene l'errore è perché ti manca di vasi plugin. per esempio nel tuo caso "Causato da: java.lang.RuntimeException:" Nessuna soluzione trovata perché il problema è insoddisfacente. ": [" Impossibile soddisfare la dipendenza da A 1.0.0.qualifier per il pacchetto org.apache.axis2.transaction 0.0.0. "," Basta dare uno sguardo al primo, non si dispone di "org.apache.axis2.transaction 0.0.0." Nel proprio repository maven. Per essere onesti, non sono sicuro di cosa sia il jar usato e come ottenerlo, mi mancava solo qualche dipendenza dai plugin rispetto ad altre versioni di eclipse quindi ho solo bisogno di jar in/eclipse/plugins Quindi quello che fai è creare un p2 repository te stesso. Ecco un altro ragazzo che a destra un link come utilizzare lo script per creare il repository p2 http://maksim.sorokin.dk/it/2010/11/26/creating-a-p2-repository-from-features-and-plugins/

2 put questo repository in ur file di POM Maven

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

3 Finora si dovrebbe risolvere il problema se avete la vasetti di plugin che è necessario in voi P2repository

se avete qualsiasi altra domanda o non così satify con risposta miniera, continuano a chiedere thx