无法使用带有bnd的Maven Central Repository来解析依赖关系

时间:2018-01-20 23:02:31

标签: eclipse maven osgi bnd bndtools

使用Eclipse Oxygen.2 Release(4.7.2),我试图使用bndtools制作一些OSGi包。

默认情况下(使用JPM存储库)我能够很好地解决依赖关系。但我无法看到那里的图书馆。因此,我想使用Maven Central来处理我的依赖项。我可以浏览网站,看看有哪些版本,并对这些信息做出选择。

build.bnd项目中的默认cnf文件的存储库设置如

# Configure Repositories
-plugin.1.Central: \
    aQute.bnd.deployer.repository.wrapper.Plugin; \
        location = "${build}/cache/wrapper"; \
        reindex = true, \
    aQute.bnd.jpm.Repository; \
        includeStaged = true; \
        name = Central; \
        location = ~/.bnd/shacache; \
        index = ${build}/central.json

-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

按照说明on the bnd website我将以下内容添加到我的文件中;因为已经有一个Central存储库,我将其命名为Maven,但其余部分是相同的

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

当我删除JPM存储库时,突然间一切都被破坏了。这并没有太大的意外,因为我只是删除了一个存储库。但是,我认为在构建和清理工作区之后,它将解决我们可以访问maven中心,它将从那里拉出来。事实并非如此。

我注意到Maven存储库上有一个index属性,所以我想也许我必须将所有依赖项名称添加到指定的文件中,但我还没有找到任何关于文件外观的文档,或者如何创建一个或任何类型的文档。

我在Eclipse中遇到的错误是

  

找不到/error/org.apache.servicemix.bundles.junit;version=4.12找不到[bnd-cache [PATH \ TO \ WORKSPACE \ cnf \ cache \ 3.5.0 \ bnd-cache r / w = false],Local,Templates,Release,MavenBndRepository [localRepo = PATH \ TO \ USER \ FOLDER.m2 \ repository,storage = Maven,inited = true]]

在整个过程中,我是否遗漏了一些东西?我有没有明显错过的东西?

1 个答案:

答案 0 :(得分:0)

我发现了(感谢OSGi enroute tutorial),我错过了什么。

指定位置需要有一个现有的索引文件,该文件由maven坐标条目组成。 jpm索引只需要工件ID和版本,但maven坐标需要组,工件和版本。

我将cnf/build.bnd条目修改为

-plugin.5.Central = \
    aQute.bnd.repository.maven.provider.MavenBndRepository; \
        releaseUrl=https://repo.maven.apache.org/maven2/; \
        name="Central"

我删除了索引文件规范,这样它只会使用默认值(cnf/<name>.mvn)。但是,我不确定文档的名称是什么。我确定它是存储库设置中指定的名称。 name="<ThisValueHere>",而不是-plugin.5.<ThisValueHere>。请注意,此值不区分大小写。

我的central.mvn文件最终看起来像

org.apache.felix:org.apache.felix.framework:5.4.0
org.apache.felix:org.apache.felix.gogo.command:1.0.2
org.apache.felix:org.apache.felix.gogo.runtime:1.0.10
org.apache.felix:org.apache.felix.gogo.shell:1.0.0
org.apache.felix:org.apache.felix.log:1.0.1
org.apache.felix:org.apache.felix.scr:2.0.14
org.apache.servicemix.bundles:org.apache.servicemix.bundles.junit:4.12_1
org.osgi:osgi.annotation:6.0.1
org.osgi:osgi.cmpn:6.0.0
org.osgi:osgi.core:6.0.0