我有几个使用正常的清单管理依赖项和使用Maven Tycho的外部版本在Eclipse中构建的OSGi包。
在Equinox上运行Eclipse内部的bundle工作正常。用Tycho构建它们可以正常工作。
现在我想使用Tycho Surefire来运行集成测试,为此我创建了一个包含一些基本测试的简单测试包。正在测试的捆绑包依赖于OSGi容器中存在的一些其他捆绑包以及一些小的启动级别调整以便正确运行 - 就像我说的那样,捆绑包本身在Equinox上正常运行时启动非常好。
为了模仿Tycho Surefire,我在测试包的pom.xml中指定了以下内容:
<build>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-surefire-plugin</artifactId>
<version>0.21.0</version>
<configuration>
<bundleStartLevel>
<bundle>
<id>org.hibernate.osgi</id>
<level>6</level>
<autoStart>true</autoStart>
</bundle>
<!-- plus a few more bundles in the real pom.xml -->
</bundleStartLevel>
</configuration>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<configuration>
<dependency-resolution>
<extraRequirements>
<requirement>
<type>eclipse-plugin</type>
<id>org.hibernate.entitymanager</id>
<versionRange>4.2.12.Final</versionRange>
</requirement>
<requirement>
<type>eclipse-plugin</type>
<id>org.hibernate.osgi</id>
<versionRange>4.2.12.Final</versionRange>
</requirement>
<!-- plus a few more bundles in the real pom.xml -->
</extraRequirements>
</dependency-resolution>
</configuration>
</plugin>
</plugins>
</build>
有趣的是,测试失败了。经过一些研究后,我发现在测试运行失败期间/之后我可以如何访问OSGi控制台以进一步调查问题(OSGi console after running tycho tests)。
我的发现是,尽管OSGi容器中存在所有必需的bundle(所有可传递的bundle和所有手动指定的bundle),但只有具有独特<bundleStartLevel>
的那些已经启动(加上OSGi-core) - 捆绑当然)。
所以考虑到上面的例子,我的发现是,虽然org.hibernate.osgi
和org.hibernate.entitymanager
都得到了解决,但只有第一个处于'ACTIVE'状态。这显然会影响整个创业公司,我的猜测是,如果捆绑包按预期启动,测试运行正常。
当我查看“正常”的Eclipse-OSGi-Launch配置时,默认情况下会有一个参数“Default Auto-Start”设置为true。我在Tycho Surefire文档中没有找到类似的东西,但是有可能为某些捆绑包设置特定的启动级别会覆盖其他捆绑包的自动启动吗?至少我不会猜测Tycho默认情况下根本不会自动启动任何捆绑包...
我非常感谢有关如何进一步调查该问题的任何提示或任何有关如何让Tycho启动我的捆绑包的线索,而无需为每个捆绑包指定明确的启动级别。
答案 0 :(得分:1)
如果有人仍然磕磕绊绊:
由于Tycho 0.23捆绑自动启动是可配置的。
<configuration>
<defaultStartLevel>
<level>7</level>
<autoStart>true</autoStart>
</defaultStartLevel>
</configuration>