2011-02-16 5 views
8

tengo un plugin de Eclipse con este manifiesto:Uso experto Tycho para construir con una entrada de manifiesto Bundle-ruta de clases que se descarga por el experto en la dependencia-plugin

... 
Bundle-ClassPath: ., 
lib/drools-api.jar, 
lib/drools-core.jar, 
... 

Ahora no queremos poner drools-api.jar y drools-core.jar de control de código fuente, por lo que utilizar un plugin para buscarlos desde el repositorio Maven:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>copy-bundle-classpath-libs</id> 
     <phase>validate</phase> 
     <goals> 
      <goal>copy</goal> 
     </goals> 
     <configuration> 
      <outputDirectory>lib</outputDirectory> 
      <overWriteReleases>true</overWriteReleases> 
      <overWriteSnapshots>true</overWriteSnapshots> 
      <overWriteIfNewer>true</overWriteIfNewer> 
      <stripVersion>true</stripVersion> 
      <artifactItems> 
      <artifactItem> 
       <groupId>org.drools</groupId> 
       <artifactId>drools-api</artifactId> 
      </artifactItem> 
      <artifactItem> 
       <groupId>org.drools</groupId> 
       <artifactId>drools-core</artifactId> 
      </artifactItem> 
      ... 

Sin embargo, primera vez construimos este módulo, se produce un error, ya que esto sucede:

[WARNING] Missing classpath entry lib/drools-api.jar ... 
[WARNING] Missing classpath entry lib/drools-core.jar ... 
... 
[INFO] --- maven-dependency-plugin:2.1:copy (copy-bundle-classpath-libs) ... --- 
... 
[INFO] Copying drools-api-5.2.0-SNAPSHOT.jar to .../lib/drools-api.jar 
[INFO] Copying drools-core-5.2.0-SNAPSHOT.jar to .../lib/drools-core.jar 
... 
[INFO] --- maven-osgi-compiler-plugin:0.10.0:compile (default-compile) ... --- 
... 
[INFO] Compiling 458 source files to ... 
// ERROR because drools-api is not in the compilation classpath 

Si nos limitamos a construir de nuevo, tiene éxito, debido a que los frascos ya están en el directorio lib antes de las compilaciones se inicia: No hay advertencias y los frascos se encuentran en la ruta de clase compilación.

¿Cómo podemos solucionar esto, así que no tenemos que comprometer las jarras en el control de código fuente y seguir usando Bundle-ClassPath?

Nota: la implementación actual del plugin requiere que utilicemos Bundle-ClassPath: usando Require-Bundle lugar no es una opción.

+0

¿Ha puesto el frasco drools-api en sus dependencias o sólo en la configuración del plugin maven-dependencia? Otra sugerencia: ¿Por qué no usar http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html – khmarbaise

+0

@khmarbaise: Intenté ambos, incluso considerando pomDependencies, pero nunca puede compilarlo si el directorio lib está vacío –

+0

Hm ... ¿Ha intentado las dependencias de copia de meta en su lugar? – khmarbaise

Respuesta

1

He intentado hacer algo similar y tengo la impresión de que esto no funcionará.

Parece que el complemento maven-dependency-plugin requiere que se resuelva el classpath de compilación para descargar JAR (incluso cuando se especifiquen dependencias a través de <artifactItems>).

Como resultado, la resolución de la ruta de clase controlada por Tycho se ejecuta antes de que se descarguen los JAR, por lo que no llegan a la ruta de clase. Tipo de huevo y pollo.

Para resolver ese problema, he creado un perfil separado "download-deps" que utilicé para actualizar el directorio de las bibliotecas (como: mvn -Pdownload-deps validate).

Este enfoque no funciona bien, sin embargo, dado que si hay paquete B que importa paquete proporcionado por el paquete A, que a su vez incrusta JAR que contiene ese paquete, la compilación de B fallará con la dependencia no resuelta. Por lo tanto, debe ejecutar este comando hasta que se descarguen todos los JAR. Muy feo.

Cuestiones relacionadas