当前位置: 首页 > 知识库问答 >
问题:

由Tycho surefire运行时未激活OSGi捆绑包

索锐藻
2023-03-14

我有几个OSGi捆绑包,它们是在Eclipse中使用普通清单管理依赖项和Maven Tycho的外部构建构建构建的。

在Equinox上运行Eclipse内部的捆绑包工作正常。用第谷建造它们效果很好。

现在我想使用Tycho Surefire运行集成测试,为此我创建了一个简单的测试包,其中包含一些基本测试。测试中的bundle依赖于OSGi容器中的其他bundle和一些小的启动级别调整,以便正确运行—正如我所说的,bundle在春分点正常运行时会自动启动。

为了模仿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控制台,以进一步调查问题(在运行tycho测试之后访问OSGi控制台)。

我的发现是,尽管OSGi容器中存在所有必要的bundle(所有传递派生的bundle和所有手动指定的bundle),但只有那些具有独特

所以在上面的例子中,我的发现是,虽然org.hibernate.osgiorg.hibernate.entitymanager都被解析了,但只有第一个处于“活动”状态。这显然会搞砸整个启动,我的猜测是,如果包按预期启动,测试将运行良好。

当我查看一个“正常”的EclipseOSGi启动配置时,有一个默认设置为true的参数“defaultautostart”。我在Tycho Surefire文档中没有找到类似的内容,但是否可能为某些捆绑包设置特定的启动级别会以某种方式覆盖其他捆绑包的自动启动?至少我猜不到Tycho在默认情况下不会自动启动任何捆绑包。。。

如果您能给我一些关于如何进一步调查这个问题的提示,或者给我一些关于如何让Tycho启动捆绑包的线索,而不必为每个捆绑包指定一个不同的启动级别,我将不胜感激。


共有1个答案

万俟棋
2023-03-14

如果有人仍然在这上面绊倒:

自第谷0.23以来,捆绑自动启动是可配置的。

<configuration>
  <defaultStartLevel>
    <level>7</level>
    <autoStart>true</autoStart>
  </defaultStartLevel>
</configuration>
 类似资料:
  • 我对这个(OSGI)真的是新手,试图做简单的例子。我不能让懒惰的修辞奏效。我知道有一些解决这些问题的蓝图,但在开始之前,我认为学习一些基础知识是很好的。 好吧,我已经改变了我的代码,但仍然没有运气。 外部应用程序,install bundles,启动framework,然后只启动DataServiceClient Bundle。不能访问任何bundle类。 以下是DataServiceClient

  • 我已经用声明性服务(DS)组件定义定义了一个OSGi包(),指定了一个导出的服务、一个激活方法和一个停用方法。 在Activate方法的主体中,我需要访问一个文件,该文件不在文件系统中,但绑定在OSGi捆绑包中。在activate方法期间,使用。 这基本上是可行的,但有一种情况是不可行的。在我的应用程序中,

  • 我有以下示例方案...(请注意,我可以使用服务实现该场景,但我正在尝试一些事情) 一个带有激活器类(将其命名为“客户端”)的OSGi捆绑包,另一个OSGi打包包是一个简单的库(将其称为“服务器”),公开了一个名为callMe()的方法。在“client”的start()方法中,有一个对“server”的callMe()方法的调用。当然,“服务器”包公开了我们使用callMe()方法的类的包,“客户

  • 问题内容: 我正在尝试在Eclipse中创建一个简单的插件。运行应用程序时,我在日志文件中看到此错误: org.osgi.framework.BundleException:捆绑包org.xy的激活器捆绑包org.xy的激活器无效。 您对此错误有任何想法吗? 问题答案: 检查你的 部分 如果未正确指定最终二进制结果中应包含的内容,它将无法正常工作。检查.class文件是否在MANIFEST.MF所

  • 问题内容: 我的要求是使用hibernate映射各种数据库(尤其是SQL Server,MySQl和Postgres);从db记录创建一个xml文件。 对于hibernate,我正在使用JAssist在运行时创建hbm文件和pojos。我的代码很棒,为了进一步模块化,我为每个数据库实现了片段捆绑包,以便我的主机捆绑包可以处理运行时类的创建并将其添加到类加载器,hbm文件创建逻辑和BL中。片段通过传

  • 我正在尝试部署我的svelte项目,但在livereload插件之外激活捆绑javascript时遇到了问题。当我运行rollup-c-w时,代码显示得很好,但在其他服务器上为应用程序提供服务不会激活JavaCScript。这至少应该是一种安慰。记录一些东西,并希望添加html,但它只显示一个空白页面。 卷起来。配置。js rollup-c将输出捆绑包。js。我的索引。下面是html 这是运行li