准备好maven依赖OSGi



我正在尝试连接JFUSE项目中的数据库。我在pom文件中包含了com.mysql.jdbc依赖项,项目构建运行良好。但后来我遇到了这个烦人的问题。当我尝试将捆绑包安装到OSGi时,安装失败,出现以下错误:

无法启动捆绑包mvn.com.info.demo/demo-rest/1.0:未解析常量bundle com.info.demo.rest[363]中的raint:无法解析363.0:缺少需求[363.0]osgi.wiring.package;(osgi.wiring.backage=com.mysql.jjdbc)

我尝试了SO提供的所有可用解决方案,但他们没有解决问题。当我试图找出错误的原因时,我在IDE中mysql的依赖声明中看到了警告,上面写着:

Maven依赖项未支持OSGi

所以,我想主要的原因是我的依赖还并没有为OSGi容器做好准备。有谁能帮助我如何让maven依赖OSGi做好准备吗

下面是我的pom.xml代码:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
***Project specific declarations here***
<build>    
    <plugins>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>2.1.0</version>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                    <Fragment-Host>org.springframework.jdbc</Fragment-Host>
                    <Import-Package>com.mysql.jdbc</Import-Package>
                </instructions>
            </configuration>                
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>com.mysql.jdbc</groupId>
        <artifactId>com.springsource.com.mysql.jdbc</artifactId>
        <version>5.1.6</version>
    </dependency>
   ***Other Dependencies***
</dependencies>

编辑:我听从了Christain的建议,效果很好。但是我需要添加其他依赖项,这些依赖项还没有准备好OSGi。

我完成了将非OSGi依赖项安装到FUSE服务器的过程。还包装了依赖项,但并没有解决问题

请帮我解决细节问题,我真的被困在这里了。

经过几天的搜索,我终于找到了最简单的解决方案。只需在Karaf或ServiceMix终端中使用这个简单的OSGiwrap命令,就可以使非OSGi捆绑包为OSGi做好准备:

osgi:安装包装:mvn:org.jdbi/jdbi/2.70

依赖关系将安装在Fuse服务器中,可以使用命令进行验证。

osgi:列表

现在只需在pom中添加依赖项。

<dependency>
    <groupId>org.jdbi</groupId>
    <artifactId>jdbi</artifactId>
    <version>2.70</version>
</dependency>

Idea仍然会警告您依赖性还没有准备好OSGi,请忽略它

最后在maven bundle插件中导入所需的包,就完成了。

<plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>${version.maven-bundle-plugin}</version>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Import-Package>
                        org.skife.jdbi.v2,
                        org.skife.jdbi.v2.util,
                        org.skife.jdbi.cglib.proxy,
                        org.skife.jdbi.v2.sqlobject.stringtemplate,
                        org.skife.jdbi.v2.sqlobject,
                        org.skife.jdbi.cglib.core
                    </Import-Package>
                </instructions>
            </configuration>
        </plugin>

希望这对将来有帮助。

在mysql驱动程序的情况下,您不必自己进行包装。mavencentral提供的mysql连接器j已经为OSGi做好了准备。maven坐标为mvn:mysql/mysql-connector java/5.1.34。

由于在OSGi中使用普通jdbc驱动程序并不容易,我建议您也使用pax-jdbc。它允许通过提供一些配置来将DataSource创建为OSGi服务。

您可以通过以下方式安装它(在Karaf>3中):功能:repo添加pax-jdbc 0.7.0功能:安装事务pax-jdbc-mysql-pax-jdbc-config-pax-jdbc-pool-dbcp2

这已经为MySQL提供了DataSourceFactory,并启用了配置和池化支持。

然后,您只需要创建一个配置,就像pax-jdbc文档中描述的那样。

这个错误意味着Fuse不知道mysql驱动程序的捆绑包。您需要手动安装。由于mysql连接器是捆绑包形式,因此在OSGI环境中安装它更容易。只需使用osgi:install,然后使用捆绑包的名称。

你也可以建立一个Kar档案来避免这种情况。

或者使用Karaf/Fuse自己的sql驱动程序,如Christian所述。

对于未准备好OSGi的Maven依赖项,有一个Maven插件可以扭曲它们-https://github.com/reficio/p2-maven-plugin,教程-http://www.vogella.com/tutorials/EclipseTycho/article.html#d314078e1011.这种方法适用于简单的组件,但对于具有大量依赖项或导出包的组件,您可能需要手动创建包装包,例如,我必须手动为pegdown、selenium和selendroid创建包装包。

相关内容

  • 没有找到相关文章

最新更新