You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用bndtools无法通过Maven Central解析OSGi依赖问题排查

看起来你在切换bndtools的依赖仓库到Maven Central时遇到了依赖解析的问题,尤其是找不到org.apache.servicemix.bundles.junit;version=4.12。我来帮你梳理下可能遗漏的步骤和修复方案:

1. 修正MavenBndRepository的配置细节

你添加的Maven仓库配置方向是对的,但有几个小细节需要调整,避免配置歧义:

  • 遵循bnd配置惯例,用冒号:替代等号=声明插件,参数统一用分号;分隔;
  • 用${build}(指向cnf下的build文件夹)替代${.},让索引文件路径更清晰,避免和其他文件混淆。

修正后的配置可以改成这样:

-plugin.5.Maven: \
aQute.bnd.repository.maven.provider.MavenBndRepository; \
releaseUrl=https://repo.maven.apache.org/maven2/; \
index="${build}/central.maven"; \
name="Maven"

如果之前生成过损坏的索引文件,建议先删除central.maven,让bnd重新生成完整索引。

2. 彻底清理旧的JPM仓库配置

你原来的-plugin.1.Central是把wrapper.Plugin和JPM.Repository绑定在一起的。如果只是删除JPM的配置行,剩下的wrapper插件会因为失去依赖而无法正常工作。建议直接替换整个旧的Central仓库配置,或者完全删除JPM相关代码,确保Maven仓库成为主要的远程依赖源:

# 优先使用Maven Central
-plugin.1.MavenCentral: \
aQute.bnd.repository.maven.provider.MavenBndRepository; \
releaseUrl=https://repo.maven.apache.org/maven2/; \
index="${build}/maven-central.index"; \
name="Maven Central"

# 保留本地仓库等原有配置
-plugin.2.Local: \
aQute.bnd.deployer.repository.LocalIndexedRepo; \
name = Local; \
pretty = true; \
local = ${build}/local
-plugin.3.Templates: \
aQute.bnd.deployer.repository.LocalIndexedRepo; \
name = Templates; \
pretty = true; \
local = ${build}/templates
-plugin.4.Release: \
aQute.bnd.deployer.repository.LocalIndexedRepo; \
name = Release; \
pretty = true; \
local = ${build}/release

3. 手动触发仓库索引刷新与依赖拉取

bnd不会自动实时更新仓库索引,修改配置后需要手动触发刷新:

  1. 在Eclipse中右键点击cnf项目 → Bnd → Refresh Repositories,这会让bnd重新生成Maven仓库的索引,并尝试拉取缺失的依赖;
  2. 如果还是无法解析,尝试清理工作区:右键项目 → Clean,重启Eclipse后再执行一次Refresh Repositories。

4. 确认依赖声明的正确性

确保你的bundle的bnd文件中正确声明了依赖:

  • 在-buildpath中明确指定编译依赖:
    -buildpath: \
        org.apache.servicemix.bundles.junit;version="[4.12,4.13)",\
        # 其他依赖...
    
  • 如果是运行时依赖,确保Import-Package中包含JUnit相关包(比如junit.framework、org.junit等),bnd会自动从Maven仓库匹配对应的OSGi bundle。

5. 检查本地Maven仓库与网络

MavenBndRepository会优先读取本地~/.m2/repository,如果本地没有目标依赖,bnd会自动从远程拉取,但网络或代理问题可能导致拉取失败:

  • 可以手动用Maven命令拉取依赖到本地:
    mvn dependency:get -DgroupId=org.apache.servicemix.bundles -DartifactId=junit -Dversion=4.12
    
  • 检查Eclipse的网络代理设置,确保bnd可以正常访问Maven Central。

按照这些步骤调整后,应该就能正常解析Maven Central的依赖了。

内容的提问来源于stack exchange,提问作者Zymus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:46:37