【问题标题】:what maven dependency do I need to load an OSGi FrameworkFactory我需要什么 Maven 依赖项来加载 OSGi FrameworkFactory
【发布时间】:2015-11-24 12:06:42
【问题描述】:

我想使用to launch a FrameworkFactory 的示例之一。要么我的编译器拒绝编译......

 Map<String,String> props=new HashMap<String,String>();
 props.put("org.osgi.framework.storage","target/osgi-store");
 props.put("org.osgi.framework.storage.clean","onFirstInit");
 FrameworkFactory factory=ServiceLoader.load(FrameworkFactory.class);
 // Type mismatch: cannot convert from ServiceLoader<FrameworkFactory> to FrameworkFactory

或者虚拟机无法加载工厂...

ServiceLoader<FrameworkFactory> loader = ServiceLoader.load(FrameworkFactory.class);
Iterator<FrameworkFactory> iter = loader.iterator();
FrameworkFactory ff = iter.next(); // there is no "next"

这是我的pom

<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/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>prices.otemba.org</groupId>
<artifactId>PricesFromOtemba</artifactId>

<version>0.0.1</version>
<packaging>jar</packaging>

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>


<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <configuration>
                    <fork>true</fork>
                    <executable>C:\Program Files\Java\jdk1.8.0_60\bin\javac.exe</executable>
                </configuration>
            </configuration>
        </plugin>
    </plugins>
</build>

<dependencies>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>

    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-core-asl</artifactId>
        <version>1.9.13</version>
    </dependency>

    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.9.13</version>
    </dependency>

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.5.4</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>1.2.3.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-core</artifactId>
        <version>4.0.1.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>4.0.1.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.1.6.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>4.1.6.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>4.0.1.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-java</artifactId>
        <version>1.2.2</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>1.2.2</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.apache.felix.gogo.runtime</artifactId>
        <version>0.16.2</version>
    </dependency>

    <dependency>
        <groupId>org.osgi</groupId>
        <artifactId>org.osgi.core</artifactId>
        <version>4.3.0</version>
    </dependency>

    <dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.osgi.core</artifactId>
        <version>1.4.0</version>
    </dependency>

</dependencies>

如果您对我的 pom 有任何建议,请随时提出建议。

【问题讨论】:

标签: java maven osgi integration


【解决方案1】:

所以我的问题是关于java.util.ServiceLoader

documentation 声明:“它在您的应用程序的类路径上搜索服务提供者”。我建立了这些例子,并对这种说法产生了强烈的怀疑。这些示例需要组装在一个 .jar 中,该 jar 具有 META-INF 中的子目录,具有服务的完整限定名称。

在这种情况下,这将是实现 org.osgi.framework.launch.FrameworkFactory 的类的完整限定名。

所以我检查了我的 M2 存储库,如果包 org.osgi.core 有这样的条目。答案是否定的。

结论:我使用的示例不适用于没有为 java.util.ServiceLoader 准备的 bundle

【讨论】:

    【解决方案2】:

    所以下面的条目:

    <dependency>
        <groupId>org.osgi</groupId>
        <artifactId>org.osgi.core</artifactId>
        <version>4.3.0</version>
    </dependency>
    

    将 OSGi 4.3 API 添加到您的项目(请注意,泛型工作需要 4.3.1 或更高版本)。这为您提供了FrameworkFactory 接口,但没有供服务加载程序查找的实现。要获得一个实现,您需要在运行时在您的类路径上有一个 OSGi R4.3(或更高版本)框架。

    例如,要添加 Apache Felix 框架 R6 实现(向后兼容 R4.3 API),您需要添加:

    <dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.apache.felix.framework</artifactId>
        <version>5.0.1</version>
        <!-- You aren't compiling against Felix, just using it at runtime -->
        <scope>runtime</scope>
    </dependency>
    

    我还建议删除以下内容:

    <dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.osgi.core</artifactId>
        <version>1.4.0</version>
    </dependency>
    

    您应该删除它的原因是它是 OSGi API jar 的旧版本。它不包含 FrameworkFactory 接口(它早于它),并且会与也在您的编译路径上的 OSGi 4.3 API 发生冲突。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-09
      • 1970-01-01
      • 2014-09-12
      • 2011-06-28
      • 1970-01-01
      • 2012-04-17
      • 2015-04-13
      • 1970-01-01
      相关资源
      最近更新 更多