2012-03-29 10 views
13

He declarado un paquete OSGi como una dependencia en mi proyecto de maven. (Es sólo pasa a ser el recipiente de Felix.)¿Por qué Maven no puede encontrar una dependencia de paquete de osgi?

<dependency> 
    <groupId>org.apache.felix</groupId> 
    <artifactId>org.apache.felix.framework</artifactId> 
    <version>4.0.2</version> 
    <type>bundle</type> 
    <scope>compile</scope> 
</dependency> 

Cuando trato de instalar, que dice que no puede encontrarlo.

[ERROR] BUILD ERROR 
[INFO] ------------------------------------------------------------------------ 
[INFO] Failed to resolve artifact. 

Missing: 
---------- 
1) org.apache.felix:org.apache.felix.framework:bundle:4.0.2 

    Try downloading the file manually from the project website. 

Pero, un vistazo rápido en el centro comprueba que este artefacto está realmente allí. Noté que si lo cambio a un tipo "jar", de hecho descargará el jar (paquete) para mí. Lo que me hizo pensar, ¿por qué lo llamé un paquete en primer lugar? Bueno, lo hice porque cuando estaba usando m2e para buscar el artefacto, lo llamaba "paquete"; de hecho, m2e generó esas coordenadas que cito arriba.

¿El paquete no es un artefacto de artefacto válido? Si no, ¿por qué m2e lo llama así?

+0

Comprobar esta pregunta http://stackoverflow.com/questions/5389691/what-is-the-meaning-of-type-bundle-in- a-maven-dependency – jordeu

+0

Gracias, pero esa publicación solo dice que un "paquete" es un paquete de osgi. Yo sé eso. Me preocupa por qué maven no parece ser capaz de resolver el artefacto. – chad

Respuesta

24

Esto no es una falla en m2e como se menciona en la respuesta aceptada. El problema es que maven no sabe qué es el tipo "paquete". Por lo tanto, debe agregar un complemento que lo defina, es decir, el paquete maven-plugin. Observe que también necesita establecer la propiedad de extensiones en verdadero. Por lo que el POM debe tener algo como

<plugin> 
     <groupId>org.apache.felix</groupId> 
     <artifactId>maven-bundle-plugin</artifactId> 
     <version>2.4.0</version> 
     <extensions>true</extensions> 
</plugin> 

El problema con la respuesta aceptada es que funciona si la dependencia del tipo de paquete es una dependencia directa; ya que es tu pom que lo declara, simplemente puedes eliminar el tipo. Sin embargo, si su dependencia tiene una dependencia del tipo paquete, entonces está jodido porque una de sus dependencias transitivas es del tipo paquete y no puede simplemente eliminar el tipo porque no es el propietario de ese artefacto y no lo hace. t tiene acceso al pom, que nuevamente su ejecución actual no comprende. intentará buscar repo/your-dependency.bundle

Me encontré con este problema cuando uso el complemento de dependencia para copiar las dependencias. En ese caso, la dependencia del complemento debe ir en el plugin mismo. Sólo se necesita el plugin de dependencia saber sobre el plugin paquete:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <dependencies> 
     <dependency> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>maven-bundle-plugin</artifactId> 
      <version>2.4.0</version> 
      <type>maven-plugin</type> 

     </dependency> 
    </dependencies> 
    <extensions>true</extensions> 
</plugin> 
+4

Esto realmente debería ser la respuesta aceptada. – JBT

Cuestiones relacionadas