java - 使 maven 依赖 OSGi 准备就绪

标签 java maven osgi osgi-bundle embedded-osgi

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

无法启动包 mvn:com.info.demo/demo-rest/1.0: Unresolved const 捆绑 com.info.demo.rest [363] 中的 raint:无法解析 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 服务器的过程。并且还包装依赖项但没有解决问题。

请帮助我提供详细的解决方案,我真的卡在这里了。

最佳答案

经过几天的搜索,我终于找到了最简单的解决方案。 非 OSGi 包可以通过在 Karaf 或 ServiceMix 终端中使用这个简单的 osgi wrap 命令使 OSGi 就绪:

osgi:install wrap: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中导入需要的包就大功告成了。

<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>

希望这对将来的人有所帮助。

关于java - 使 maven 依赖 OSGi 准备就绪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34087943/

相关文章:

JavaFX TextField 获取单击的项目

java - Eclipse Gradle 插件未安装

java - Cassandra 连接失败

java - BndTools,如何添加非 OSGi JAR?使用普通 JAR 会破坏整个项目。缺少要求的接线包

scala - 从 IDEA 启动 OSGi

java - websphere liberty - SLF4J jar 与 websphere 内部包冲突

java - Servlet - 如何接收 zip 文件

Java:系统地忽略从字典中随机选择的某些4个字母的单词?

java - 从资源java中读取文件时出现空指针异常

maven - 有没有办法过滤Maven的依赖:tree by scope?