使用maven tycho构建一个由maven-dependency-plugin下载的清单条目Bundle-ClassPath

时间:2011-02-16 14:34:45

标签: java build maven osgi tycho

我有一个带有此清单的eclipse插件:

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

现在我们不想将drools-api.jardrools-core.jar放在源代码管理中,所以我们使用插件从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>
            ...

但是,第一次我们构建了这个模块,它失败了,因为这种情况发生了:

[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

如果我们再次构建它,它会成功,因为在构建开始之前,jar已经在lib目录中:没有警告,并且jar在编译类路径中。

我们如何解决这个问题,以便我们不需要在源代码管理中提交jar并仍然使用Bundle-ClassPath

注意:插件的当前实现要求我们使用Bundle-ClassPath:使用Require-Bundle而不是选项。

2 个答案:

答案 0 :(得分:2)

这是一个已知的错误。

请参阅https://issues.sonatype.org/browse/TYCHO-577

答案 1 :(得分:1)

我试图做类似的事情,我得到的印象是这不起作用。

看起来像maven-dependency-plugin需要解析编译类路径才能下载JAR(即使你通过&lt; artifactItems&gt;指定依赖项)。

因此,在下载JAR之前执行Tycho驱动的类路径解析,因此它们不会进入类路径。鸡肉和鸡蛋的问题。

为了解决这个问题,我创建了一个单独的配置文件“download-deps”,我用它来刷新库目录(例如:mvn -Pdownload-deps validate)。

这个approcha不能正常工作,因为如果有一个包B导入包A提供的包,而后者又嵌入了包含该包的JAR,那么B的编译将失败未解决的依赖。因此,您必须运行此命令,直到下载所有JAR。非常难看。