将bundle添加到存储库后,bnd gradle插件失败

时间:2016-02-10 02:05:46

标签: java osgi bnd

我在Eclipse中使用bndtools处理OSGi包。我刚刚向cnf/localrepo存储库添加了一个新的bundle(apache commons logging),我们的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中添加一个在构建之前刷新索引的任务?
我们是否应该将所有依赖项移动到在线存储库中,以便不需要管理索引?

2 个答案:

答案 0 :(得分:2)

什么样的回购是cnf/localrepo?如果它是FileRepo,那么您不需要索引。您只需将bundle的文件夹/文件名格式设置为bundle的bsn / version。如果is是indexed repo,则必须维护索引并使用添加到repo的新bundle提交它。这是我们管理bundle-hub repo。每当添加新包时,我们都会更新索引。

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

答案 1 :(得分: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脚本的方向。