1

我正在使用 Eclipse 中的 bndtools 处理 OSGi 包。我刚刚向存储库添加了一个新包(apache commons logging)cnf/localrepo,我们的 CI 服务器现在无法构建:

[Gradle] - Launching build.
[workspace] $ gradle build
:mybundle  : Cannot find /error/com.springsource.org.apache.commons.logging;version=0 Not found in [bnd-cache, Release, Local, Bndtools Hub, /var/lib/jenkins/jobs/myapp/workspace/cnf/nonosgi-repo r/w=true]
Error  : com.springsource.org.apache.commons.logging;version=0 Not found in [bnd-cache, Release, Local, Bndtools Hub, /var/lib/jenkins/jobs/myapp/workspace/cnf/nonosgi-repo r/w=true]

为简单起见,对项目名称进行了轻微混淆。

在我看来,gradle 插件没有刷新存储库索引 - 如果我的一个队友从我们的 vcs 更新而没有在 Eclipse 中刷新,那么他们会得到同样的错误。

我知道 bndtools 有 org.osgi.impl.bundle.repoindex.cli 插件,但我对 bndtools 或 gradle 的了解还不够,无法将它应用到我的项目中。我也觉得好像(a)gradle插件应该自己刷新存储库或者(b)我错误地使用了存储库。

是否可以在我们的 build.gradle 中添加一个在构建之前刷新索引的任务?
我们是否应该将所有依赖项移动到在线存储库,以便 bnd 不需要管理索引?

4

2 回答 2

2

什么样的回购是cnf/localrepo?如果它是 a FileRepo,那么您不需要索引。您只需将捆绑包放在捆绑包的 bsn/版本的文件夹/文件名格式中。如果 is 是一个索引存储库,那么您必须维护索引并将其与添加到存储库的新捆绑包一起提交。这是我们管理bundle-hub repo 的地方。每当添加新包时,我们都会更新索引。

至于 gradle 插件,您可以编写一个任务来重新索引您的 repo 每个构建。有关如何执行此操作的讨论,请参阅https://groups.google.com/forum/#!searchin/bndtools-users/index$20gradle/bndtools-users/OQ0Ns5v0ELo/JOB803lBBwAJ 。

于 2016-02-10T13:32:51.217 回答
0

我们是否应该将所有依赖项移至在线存储库,以便 bnd 不需要管理索引?

可能,但由于各种原因,在短期内继续使用我们的LocalIndexedRepository.

是否可以在我们的 build.gradle 中添加一个在构建之前刷新索引的任务?

bndtools 的 Bundle-Hub 存储库使用 org.osgi.impl.bundle.repoindex.cli 插件在其build.gradle中重新索引存储库。由于我不熟悉 groovy 或 gradle,我只是将其代码复制到cnf/localrepo/build.gradle 中

repositories {
  mavenCentral()
}

configurations {
  repoindex
}

dependencies {
  repoindex group: 'biz.aQute.bnd', name: 'org.osgi.impl.bundle.repoindex.cli', version: '3.0.0' 
}

defaultTasks = [':index']

task('index') {
  /* Bundles to index. */
  def bundles = fileTree(projectDir) {
    include '**/*.jar'
    exclude '**/*-latest.jar'
    exclude '.*/'
  }
  doLast {
    javaexec {
      main = '-jar' // first arg must be the jar
      args configurations.repoindex.singleFile
      args '-n', 'Local' // REPO NAME HERE
      args bundles*.absolutePath
    }.assertNormalExitValue()
  }
}

感谢 BJ Hargrave 为我指明了 Bundle-Hub 脚本的方向。

于 2016-02-11T00:03:48.683 回答