2012-04-20 24 views
7

Tengo que crear un plugin de Eclipse con un Maven/Tycho que tenga dependencias con otros terceros. Como dependencias incrustar aún no está soportado por Tycho, me separé en dos proyectos de la siguiente manera:Tycho: 'No se puede satisfacer la dependencia ...' cuando se compila a través del módulo principal múltiple

  • A-thirdparty: proyecto con un embalaje 'paquete', construido por experto-haz-plugin, que tienen 'Embed- ' instrucción, y la exportación de todos los paquetes que son requeridos por un plugin 'dependencia a'
  • A: proyecto con un embalaje 'Eclipse-plugin', usando Tycho-maven-plugin, y la meta-plataforma- de Tycho plug-in de configuración con pomDependencies establecido en consider.

Cuando los construyo por separado (al principio, agregador de terceros, y luego proyecto A), todo funciona bien. Sin embargo, si reunen ambas esos proyectos (utilizando POM varios módulos), me sale el siguiente Maven ERROR:

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

¿Por qué los proyectos de construcción de la moda agregada provoca este error, y qué tipo de solución podría ser posible si eso es un error de Tycho?

Sin embargo, no hay error si dejo solo un módulo en POM de agregación (independientemente de cuál).

EDITAR

no pueden reproducirse con una, muestra varios módulos similares pequeña. Lo que significa que hay algo sobre mi jerarquía POM.

Edit2

fue capaz de reproducir con un, muestra varios módulos similares pequeña, después de incluir mismo conjunto de dependencias (par de librerías axis2 & axioma).

Edit3: minimalista Ejemplo

Ahora me pregunto si el problema es por perder todos thirdparties requeridos por bibliotecas de terceros que incluí. Si es así, ¿por qué puedo construir correctamente al ejecutar ambos módulos por separado, y construir falla solo cuando se hace mediante parent, multi-module pom.xml? El siguiente ejemplo incluye solo un único JAR de kernel axis2, incluido en un artefacto pom-first llamado first-thirdparty.

En lugar de A, el ejemplo tiene keywoard first. La estructura de carpetas es el siguiente:

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

Raíz 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 de first-thirdparty. Simplemente incrusta axis2-kernel JAR (no hay otras bibliotecas ...):

<?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 de first, que es un eclipse-plugin, y depende de 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 de módulo first; lo que importa explícitamente todos los paquetes de 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

sería de gran ayuda para mostrarnos su pom.xml principal, así como lo que manda' Revocando a Maven con. – SpellingD

+0

@SpellingD Ok, voy a poner el código de muestra, ya que logré minimizar el código. –

+0

@SpellingD No hay mucho código, pero estoy considerando moverlo a un almacenamiento compartido. Si puede sugerir uno, hágalo. Me pregunto ahora, si el problema sobre las dependencias de Axis2 no está incluido, y esto afecta el proceso de compilación. Sin embargo, puedo construir estos módulos por separado, así que me pregunto qué hay de malo en agregarlos a través del módulo principal multiprocesador. –

Respuesta

11

No es posible construir paquetes "POM-primero" (es decir, paquetes construidos con maven-haz-plugin) y paquetes "MANIFIESTO de un puño" (es decir, manojos construido por Tycho) en el mismo reactor. Este es un known limitation in Tycho.

La razón es que Tycho hace su resolución de dependencia demasiado temprano en el ciclo de vida de Maven cuando el complemento maven-bundle todavía no ha tenido la oportunidad de generar el manifiesto (necesario por Tycho). Para resolver este problema, se necesita quite large changes, pero aún espero hacerlo en el mediano plazo.

+0

Gracias, este es un comentario realmente valioso. Me aseguraré de abrir la solicitud lo antes posible, ya que estamos interesados ​​en que este caso funcione en una única compilación. Estoy aceptando tu respuesta, ya que explica claramente la causa de mi problema. –

1

Acabo consigo misma issue.I puedo solucionar mi problema de esta manera espero que esto le ayudaría

1 la razón por la que sale el error se debe a que la falta de frascos del plugin. por ejemplo, en su caso "Causado por: java.lang.RuntimeException:" No se encontró una solución porque el problema es insatisfactorio. ": [" No se puede satisfacer la dependencia de A 1.0.0.qualifier al paquete org.apache.axis2.transaction 0.0.0. "," Solo mira el primero, no tienes "org.apache.axis2.transaction 0.0.0." En tu repositorio maven. Para ser sincero, no estoy seguro de para qué sirve el tarro y cómo obtenerlo, me faltaba la dependencia de algunos plugins de otra versión del eclipse, así que solo necesito jar en/eclipse/plugins Entonces, lo que debes hacer es crear un p2 repositorio usted mismo. Aquí hay otro tipo que la derecha un enlace a usar script para crear el repositorio p2 http://maksim.sorokin.dk/it/2010/11/26/creating-a-p2-repository-from-features-and-plugins/

2 put este repositorio en ur archivo POM Maven

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

3 Hasta el momento se debe solucionar el problema, si usted tiene la tarros de plugin que necesita en que P2repository

si tiene alguna otra pregunta o no tan satify con la respuesta mía, sigue preguntando THX

Cuestiones relacionadas