0

我现在正在使用 pax-exam 运行我的 osgi 单元测试。在我正在做的项目中,bundle 之间有很多子模块和依赖关系。现在,我项目中的 bundle 版本是 xxx-SNAPSHOT。我将 pax-exam 配置选项设置为:

options.add(CoreOptions.mavenBundle().groupId("xxx.xxx").artifactId("xxx.xxxx.xxxx.xx").versionAsInProject());

当我运行测试时,pax 将重新下载我的 SNAPSHOT 依赖项,并从我的本地 repo 中读取发布依赖项。并输出以下信息:

[main] INFO org.ops4j.pax.scanner.internal.ProvisionServiceImpl - Scan bundles from [scan-bundle:mvn:commons-lang/commons-lang/2.6]
[main] INFO org.ops4j.pax.scanner.internal.ProvisionServiceImpl - Scan bundles from [scan-bundle:mvn:xxx.xxx/xxx.xxx.xxx/x.x.x-SNAPSHOT@update]

如您所见,pax 将自动更新 SNAPSHOT 依赖项,即使我没有设置依赖项更新策略。 我的问题是:这是 pax 违约行为吗?如何改变这种行为?我不想自动更新 SNAPSHOT 依赖项。

4

3 回答 3

1

您在日志消息中看到的 @update 后缀是指 OSGi 包更新,而不是 Maven 快照更新。

请参阅http://team.ops4j.org/wiki/display/paxscanner/Bundle+Scanner

顺便说一句,您似乎正在使用 Pax Runner Container。Native Container 通常更易于使用。

于 2012-08-04T08:44:36.423 回答
0

正如 Harald 所描述的,您正在观察 Pax Runner 的行为。默认情况下,Pax Exam 在每次运行时使用一个干净的 Pax Runner 工作文件夹,因此它总是会更新来自 maven 存储库(本地或远程)的每个工件。它的工作原理完全取决于您使用的 Pax Exam 和 Runner 的特定版本 + 您的 settings.xml。由于近年来 Pax URL 的底层实现发生了变化,您需要更好地描述您的上下文和设置(版本!)。

很乐意在这里提供帮助。

于 2012-08-09T14:21:23.490 回答
0

SNAPSHOT 更新策略更多是 maven 的功能而不是 Pax。当您使用 maven 下载 SNAPSHOT 时,maven 将在您下载的依赖项的版本目录中创建一个 xml 元数据文件。该文件将位于您的本地 Maven 存储库中。此元数据文件将包含文件创建日期的日期时间戳。当您再次解决依赖关系时,maven 将再次将外部存储库中可用的 SNAPSHOT 日期与本地存储库中的日期进行比较,并确保您获得最新的可用日期。我知道这个答案更多地是关于 maven 的工作原理而不是 Pax,但是如果您了解 maven mojo 在快照方面的工作方式,那应该可以帮助您更好地了解您正在使用的 PAX 版本是如何编写来更新该功能的。

于 2012-08-11T22:45:20.143 回答