无法从Bndtools中的Maven存储库添加测试依赖项

时间:2017-01-18 15:36:10

标签: osgi bnd bndtools

在Bndtools工作区中,我想在某个项目中向JUnit和Mockito添加依赖项

因此项目的bnd.bnd文件包含此-testpath指令:

-testpath: \
    junit:junit;version=latest,\
    org.mockito:mockito-core;version=latest

A'全球' cnf/ext/repositories.bnd中的bnd文件表示这些存储库:

-plugin: \
    aQute.bnd.repository.osgi.OSGiRepository; \
        name=Bndtools Hub; \
        locations=https://raw.githubusercontent.com/bndtools/bundle-hub/master/index.xml.gz; \
    , \
    aQute.bnd.repository.maven.pom.provider.BndPomRepository; \
        releaseUrls=https://repo.maven.apache.org/maven2/; \
        pom=${workspace}/cnf/maven-central.xml; \
        location=cnf/cache/maven-central.xml; \
        name=Maven Central;

maven-central.xml列出了这些依赖关系:

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
  </dependency>
  <dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>2.6.3</version>
  </dependency>
</dependencies>

存储库视图显示两个存储库。 Mockito库甚至出现在两个存储库中:Maven存储库中的v2.6和Bndtools Hub中的v 1.x

可以很好地解决JUnit依赖关系,但无论我尝试什么,都无法解决Mockito依赖关系:

Repositories 视图使用感叹号 [!] NullPointerException

来装饰无法解析的条目

enter image description here

调试Bndtools使我得出的结论是,没有相应POM文件的本地副本(请参阅bnd issue #1849)。但是,我无法弄清楚为什么没有POM文件。

我还尝试过其他库而不是Mockito,AssertJ,但没有明显的区别。因此,这似乎不是Mockito本身的问题。

关于Mockito为何无法解决或如何解决这个问题的任何暗示都是非常受欢迎的。

1 个答案:

答案 0 :(得分:0)

我不确定您的示例为何不起作用,但是我已经成功地将Bndtools 4.1和4.2-dev与Mockito和AssertJ一起成功使用了(并且同时使用了)。 OSGi enRoute 7.0模板包括Mockito。

我有点怀疑您的pom指定2.6.3,但是Bndtools存储库视图显示2.6.0。在我看来,Bndtools没有刷新它,或者可能没有正确解析它。它还没有下载Mockito的传递依赖。也许要确保您不在离线模式下运行?

尝试升级到最新版本的Bndtools,看看是否可以解决。我刚刚在4.2-dev和Mockito 2.6.3中进行了尝试,它似乎可以工作(包括下载必要的可传递依赖项)。

如果这不起作用,则可能发布完整的maven-central.xml pom文件,而不是仅发布依赖项部分(或者该文件是否仅包含依赖项部分?)。

我希望其中一些建议会有所帮助。

还要注意(略有关联):如果您将AssertJ与OSGi一起使用,请确保使用3.11.1或更高版本。较早的版本在OSGi清单中有一个小错误,导致无法进行假设(请参阅https://github.com/joel-costigliola/assertj-core/issues/1290)。