bnd gradle 插件在将包添加到存储库后失败
bnd gradle plugin fails after adding bundles to a repository
我正在 Eclipse 中使用 bndtools 开发 OSGi 包。我刚刚向 cnf/localrepo
存储库添加了一个新包(apache 公共日志记录),我们的 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 不需要管理索引?
cnf/localrepo
是哪种回购协议?如果是FileRepo
, then you don't need an index. You just put the bundles in a folder/filename format for the bundle's bsn/version. If is is an indexed repo, then you must maintain the index and commit it with the new bundles added to the repo. This is we manage the bundle-hub repo。每当添加新包时,我们都会更新索引。
至于 gradle 插件,您可以编写一个任务来重新索引您的 repo 每次构建。有关如何执行此操作的讨论,请参阅 https://groups.google.com/forum/#!searchin/bndtools-users/indexgradle/bndtools-users/OQ0Ns5v0ELo/JOB803lBBwAJ。
Should we instead move all our dependencies to an online repository so bnd doesn't need to manage the indexes?
可能,但由于各种原因,短期内继续使用我们的 LocalIndexedRepository
.
会更容易
Is it possible to add a task to our build.gradle that refreshes the indexes before a build?
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 脚本的方向。
我正在 Eclipse 中使用 bndtools 开发 OSGi 包。我刚刚向 cnf/localrepo
存储库添加了一个新包(apache 公共日志记录),我们的 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 不需要管理索引?
cnf/localrepo
是哪种回购协议?如果是FileRepo
, then you don't need an index. You just put the bundles in a folder/filename format for the bundle's bsn/version. If is is an indexed repo, then you must maintain the index and commit it with the new bundles added to the repo. This is we manage the bundle-hub repo。每当添加新包时,我们都会更新索引。
至于 gradle 插件,您可以编写一个任务来重新索引您的 repo 每次构建。有关如何执行此操作的讨论,请参阅 https://groups.google.com/forum/#!searchin/bndtools-users/indexgradle/bndtools-users/OQ0Ns5v0ELo/JOB803lBBwAJ。
Should we instead move all our dependencies to an online repository so bnd doesn't need to manage the indexes?
可能,但由于各种原因,短期内继续使用我们的 LocalIndexedRepository
.
Is it possible to add a task to our build.gradle that refreshes the indexes before a build?
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 脚本的方向。