Usar o maven tycho para construir com um manifesto de entrada Bundle-ClassPath que é baixado pelo maven dependency-plugin

StackOverflow https://stackoverflow.com/questions/5017687

Pergunta

Eu tenho um plugin do eclipse com este manifesto:

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

Agora nós não queremos colocar drools-api.jar e drools-core.jar no controle de origem, então vamos usar um plugin para buscá-los a partir do repositório 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>
            ...

No entanto, a primeira vez vamos construir este módulo, ele não consegue, porque isso acontece:

[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

Se nós apenas construí-lo novamente, ele consegue, porque os vidrinhos já estão no lib diretório antes de a cria começa:não há advertências e os frascos são na compilação classpath.

Como podemos corrigir isso assim não precisamos cometer os vidros no controle de origem e ainda usar Bundle-ClassPath?

Nota:a implementação atual do plugin exige de nós o uso Bundle-ClassPath:usando Require-Bundle em vez disso, não é uma opção.

Foi útil?

Solução

isso é um bug conhecido.

ver https://issues.sonatype.org/browse/TYCHO-577

Outras dicas

Eu tentei fazer semelhante coisa, e eu tenho a impressão de que isso não vai funcionar.

Parece maven dependency-plugin requer compilar classpath para ser resolvido em ordem para baixar Frascos (mesmo quando você especificar dependências através <artifactItems>).

Como resultado, Tycho-driven classpath resolução é executado antes de Frascos são baixados, então eles não fazem o seu caminho para o classpath.Tipo do ovo e da galinha problema.

Para resolver esse problema, eu criei um perfil separado "download-deps" que eu usei para atualizar as bibliotecas de diretório (como: mvn -Pdownload-deps validate).

Este approcha não funciona bem, pois se há bundle B que pacote de importação fornecido pelo pacote A, que por sua vez incorpora Frascos que contém o pacote de compilação de B irá falhar com dependência não resolvidos.Portanto, você tem que executar esse comando até que todos os Frascos são baixados.Muito feio.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top