pax-exam中的maven SNAPSHOT依赖更新策略是什么?

时间:2012-08-03 03:21:52

标签: junit osgi pax-runner pax-exam

我正在使用pax-exam来运行我的osgi单元测试。在我正在进行的项目中,bundle之间有许多子模块和依赖关系。现在,我项目中捆绑包的版本是x.x.x-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依赖项。 我的问题是:那个人是否违反了行为?如何改变这种行为?我不想自动更新SNAPSHOT依赖项。

3 个答案:

答案 0 :(得分:1)

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

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

顺便说一句,您似乎正在使用Pax Runner Container。本机容器通常更容易使用。

答案 1 :(得分:0)

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

很高兴在这里提供帮助。

答案 2 :(得分:0)

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