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

Posted

技术标签:

【中文标题】无法从 Bndtools 中的 Maven 存储库添加测试依赖项【英文标题】:Unable to add test dependencies from Maven repository in Bndtools 【发布时间】:2017-06-03 01:35:02 【问题描述】:

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

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

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

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

装饰无法解析的条目

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

我还尝试了其他库而不是 Mockito,例如 AssertJ,但没有显着差异。因此,这似乎不是 Mockito 本身的问题。

非常欢迎任何关于 Mockito 为何无法解决或如何解决此问题的提示。

【问题讨论】:

【参考方案1】:

我不确定为什么您的示例不起作用,但我已经成功地将 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)。

【讨论】:

以上是关于无法从 Bndtools 中的 Maven 存储库添加测试依赖项的主要内容,如果未能解决你的问题,请参考以下文章

osgi (bndtools) 中的 Restlet 包无法启动。激活程序错误 com/sun/net/httpserver/HttpHandler

将 PaxExam 与 Bndtools 一起使用

Maven 无法解决具有多个存储库的递归依赖项

Maven 不会从谷歌存储库下载 jars

将自己的库从私有存储库发布到 maven Central

Hudson 无法构建我的 Maven 2 项目,因为它说存储库中缺少工件? (他们不是)