【问题标题】:Use maven tycho to build with a manifest entry Bundle-ClassPath that gets downloaded by the maven-dependency-plugin使用 maven tycho 构建清单条目 Bundle-ClassPath,该条目由 maven-dependency-plugin 下载
【发布时间】:2011-06-28 09:50:12
【问题描述】:

我有一个带有这个清单的 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 在编译类路径中。

我们怎样才能解决这个问题,这样我们就不需要在源代码管理中提交 jars 并且仍然使用Bundle-ClassPath

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

【问题讨论】:

  • 你是把drools-api jar 放到你的依赖中还是只在maven-dependency 插件的配置中?其他提示:为什么不使用felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html
  • @khmarbaise:我都试过了,即使考虑了 pomDependencies,但如果 lib 目录为空,它永远无法编译它
  • 嗯..您是否尝试过目标复制依赖项?
  • 是的,pomDependencies:consider 和 copy-dependencies 仍然不足以在第一次构建的编译类路径中获取它。

标签: java build maven osgi tycho


【解决方案1】:

这是一个已知的错误。

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

【讨论】:

    【解决方案2】:

    我曾尝试做类似的事情,但我的印象是这行不通。

    似乎 maven-dependency-plugin 需要解析编译类路径才能下载 JAR(即使您通过 指定依赖项)。

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

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

    不过,这个方法不能很好地工作,因为如果有 bundle B 提供的包 A 提供的导入包,而后者又嵌入了包含该包的 JAR,则 B 的编译将因未解决的依赖关系而失败。因此,您必须运行此命令,直到下载所有 JAR。很丑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-21
      • 2014-09-25
      • 1970-01-01
      • 2011-06-18
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      • 2012-09-28
      相关资源
      最近更新 更多