使 maven 依赖 OSGi 准备就绪
Make maven dependency OSGi ready
我正在尝试连接 JFUSE 项目中的数据库。我在 pom 文件中包含 com.mysql.jdbc 依赖项,项目构建运行良好。但是后来我遇到了这个烦人的问题。当我尝试将捆绑包安装到 OSGi 时,安装失败并出现以下错误:
无法启动包 mvn:com.info.demo/demo-rest/1.0: 未解析的常量
捆绑包中的雨 com.info.demo.rest [363]:无法解析 363.0:缺少要求 [363.0] osgi.wiring.package; (osgi.wiring.package=com.mysql.jdbc)
我尝试了 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>
编辑:
我听从了克里斯汀的建议,效果很好。但我需要添加其他未准备好 OSGi 的依赖项。
我完成了将非 OSGi 依赖项安装到 FUSE 服务器的过程。并且还包装依赖项但没有解决问题。
请帮我提供详细的解决方案,我真的卡在这里了。
对于 mysql 驱动程序,您不必自己进行包装。可从 Maven Central 获得的 mysql 连接器 j 已经准备好 OSGi。 Maven 坐标为 mvn:mysql/mysql-connector-java/5.1.34.
由于在 OSGi 中使用普通 jdbc 驱动程序并不容易,因此我建议您也使用 pax-jdbc。它允许通过提供一些配置来将数据源创建为 OSGi 服务。
您可以这样安装(在 Karaf > 3 中):
feature:repo-增加人数-jdbc 0.7.0
feature:install 事务 pax-jdbc-mysql pax-jdbc-config pax-jdbc-pool-dbcp2
这已经为 MySQL 提供了 DataSourceFactory 并启用了配置和池化支持。
然后您只需创建一个如 pax jdbc docs 中所述的配置。
该错误意味着 Fuse 不知道 mysql 驱动程序的捆绑包。您需要手动安装它。由于 mysql 连接器是捆绑包形式,因此更容易在 OSGI 环境中安装它。只需使用 osgi:install 然后是包的名称。
您也可以构建一个 Kar 存档来避免这种情况。
或者使用 Karaf/Fuse 自己的 sql 驱动程序,正如 Christian 提到的那样。
对于未准备好 OSGi 的 Maven 依赖项,有一个 Maven 插件可以扭曲它们 - https://github.com/reficio/p2-maven-plugin, a tutorial - http://www.vogella.com/tutorials/EclipseTycho/article.html#d314078e1011。这种方法适用于简单的组件,但对于具有大量依赖项或大量导出包的组件,您可能需要手动创建包装器包,例如我必须手动为 pegdown、selenium 和 selendroid 创建包装器包。
经过几天的搜索,我终于找到了最简单的解决方案。
非 OSGi 包可以通过在 Karaf 或 ServiceMix 终端中使用这个简单的 osgi wrap 命令使 OSGi 准备就绪:
osgi:安装wrap:mvn:org.jdbi/jdbi/2.70
Fuse服务器会安装依赖,可以使用命令验证。
osgi:list
现在只需要在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>
希望这对以后的人有所帮助。
我正在尝试连接 JFUSE 项目中的数据库。我在 pom 文件中包含 com.mysql.jdbc 依赖项,项目构建运行良好。但是后来我遇到了这个烦人的问题。当我尝试将捆绑包安装到 OSGi 时,安装失败并出现以下错误:
无法启动包 mvn:com.info.demo/demo-rest/1.0: 未解析的常量 捆绑包中的雨 com.info.demo.rest [363]:无法解析 363.0:缺少要求 [363.0] osgi.wiring.package; (osgi.wiring.package=com.mysql.jdbc)
我尝试了 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>
编辑: 我听从了克里斯汀的建议,效果很好。但我需要添加其他未准备好 OSGi 的依赖项。
我完成了将非 OSGi 依赖项安装到 FUSE 服务器的过程。并且还包装依赖项但没有解决问题。
请帮我提供详细的解决方案,我真的卡在这里了。
对于 mysql 驱动程序,您不必自己进行包装。可从 Maven Central 获得的 mysql 连接器 j 已经准备好 OSGi。 Maven 坐标为 mvn:mysql/mysql-connector-java/5.1.34.
由于在 OSGi 中使用普通 jdbc 驱动程序并不容易,因此我建议您也使用 pax-jdbc。它允许通过提供一些配置来将数据源创建为 OSGi 服务。
您可以这样安装(在 Karaf > 3 中): feature:repo-增加人数-jdbc 0.7.0 feature:install 事务 pax-jdbc-mysql pax-jdbc-config pax-jdbc-pool-dbcp2
这已经为 MySQL 提供了 DataSourceFactory 并启用了配置和池化支持。
然后您只需创建一个如 pax jdbc docs 中所述的配置。
该错误意味着 Fuse 不知道 mysql 驱动程序的捆绑包。您需要手动安装它。由于 mysql 连接器是捆绑包形式,因此更容易在 OSGI 环境中安装它。只需使用 osgi:install 然后是包的名称。
您也可以构建一个 Kar 存档来避免这种情况。
或者使用 Karaf/Fuse 自己的 sql 驱动程序,正如 Christian 提到的那样。
对于未准备好 OSGi 的 Maven 依赖项,有一个 Maven 插件可以扭曲它们 - https://github.com/reficio/p2-maven-plugin, a tutorial - http://www.vogella.com/tutorials/EclipseTycho/article.html#d314078e1011。这种方法适用于简单的组件,但对于具有大量依赖项或大量导出包的组件,您可能需要手动创建包装器包,例如我必须手动为 pegdown、selenium 和 selendroid 创建包装器包。
经过几天的搜索,我终于找到了最简单的解决方案。 非 OSGi 包可以通过在 Karaf 或 ServiceMix 终端中使用这个简单的 osgi wrap 命令使 OSGi 准备就绪:
osgi:安装wrap:mvn:org.jdbi/jdbi/2.70
Fuse服务器会安装依赖,可以使用命令验证。
osgi:list
现在只需要在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>
希望这对以后的人有所帮助。