0

私は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">
<modelVersion>4.0.0</modelVersion>
<parent>
    <artifactId>cross</artifactId>
    <groupId>net.sf.maltcms</groupId>
    <version>1.2.12-SNAPSHOT</version>
</parent>
<artifactId>cross-main</artifactId>
<packaging>jar</packaging>
<name>cross-main</name>
<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>cross-annotations</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>cross-event</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>cross-tools</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>cross-exception</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>cross-main-api</artifactId>
        <version>${project.version}</version>
        <exclusions>
            <exclusion>
                <artifactId>commons-logging</artifactId>
                <groupId>commons-logging</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>3.0.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-asm</artifactId>
        <version>3.0.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>3.0.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>3.0.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>3.0.6.RELEASE</version>
        <exclusions>
            <exclusion>
                <artifactId>commons-logging</artifactId>
                <groupId>commons-logging</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-expression</artifactId>
        <version>3.0.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.1</version>
    </dependency>
    <dependency>
        <groupId>net.sf.ehcache</groupId>
        <artifactId>ehcache-core</artifactId>
        <version>2.4.6</version>
    </dependency>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>cross-math</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>com.db4o</groupId>
        <artifactId>db4o-all</artifactId>
        <version>8.0.249</version>
    </dependency>
    <dependency>
        <groupId>net.sf.mpaxs</groupId>
        <artifactId>mpaxs-spi</artifactId>
        <version>1.6.10</version>
    </dependency>
    <dependency>
        <groupId>net.sf.mpaxs</groupId>
        <artifactId>mpaxs-server</artifactId>
        <version>1.6.10</version>
    </dependency>
</dependencies>

私はいくつかの調査を行い、maven用のApache Bundle Pluginを見つけ、pomをこれに変更しました

<packaging>bundle</packaging>

と追加

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>
            <configuration>
                <instructions>          
                    <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
                </instructions>
            </configuration>
        </plugin>
    </plugins>
</build>

mvn clean installは正常に実行され、マニフェストを含むjarファイルを取得しましたが、もちろんバンドルを解決できませんでした

 BundleException: The bundle "cross-main_1.2.12.SNAPSHOT [30]" could not be resolved. Reason: Missing Constraint: Import-Package: com.db4o; version="[8.0.0,9.0.0)

簡単に言うと、MavenアプリケーションをOSGiバンドルに移行する可能性は何ですか?

特に依存関係を管理する方法

4

2 に答える 2

2

おそらくすべてがビルドでうまくいきました。Mavenバンドルプラグインは、バンドルがアクセスするすべてのパッケージのインポートパッケージステートメントを自動的に作成します。blueprinntとspringの設定も調べます。

したがって、表示されるエラーメッセージは

could not be resolved. Reason: Missing Constraint: 
    Import-Package: com.db4o; version="[8.0.0,9.0.0)"

単に、これらのパッケージをエクスポートするバンドルをコンテナにインストールする必要があることを意味します。したがって、理想的には、db4ojarはすでにバンドルになっています。その後、簡単にインストールできます。そうでない場合は、バンドルを作成する必要があります。

apache karafを使用する場合は、単純なケースで機能するpax urlのwrap:プロトコルを使用して、その場でバンドルを作成できます。さらに必要な場合は、Mavenプロジェクトを作成してjarをバンドルにラップできます。ただし、ほとんどの場合、これは必要ありません。

db4oのダウンロードを確認しました。これには、コンテナーにインストールできるdb4oosgiバンドルが含まれています。

于 2012-10-06T06:30:42.700 に答える
0

Mavenファイルは正しいようです。これBundleExceptionはあなたが得ているものです:

BundleException: The bundle "cross-main_1.2.12.SNAPSHOT [30]" could not be resolved. Reason: Missing Constraint: Import-Package: com.db4o; version="[8.0.0,9.0.0)

バンドル内の適切なパッケージをインポートする必要があるためです。たとえば、私はバンドルプラグインを持っています:

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>2.3.7</version>
    <extensions>true</extensions>
    <configuration>
        <archive>
            <manifestEntries>
                <Build-Change-Set>${changeSet}</Build-Change-Set>
                <Build-Change-Set-Date>${changeSetDate}</Build-Change-Set-Date>
                <Build-Location>${basedir}</Build-Location>
                <Build-Machine>${env.COMPUTERNAME}</Build-Machine>
                <Build-Date>${maven.build.timestamp}</Build-Date>
            </manifestEntries>
        </archive>
        <instructions>
            <Export-Package>my.bundle.main.package.*,
            </Export-Package>
            <Import-Package>
                org.springframework.context.weaving,
                org.springframework.aop,
                org.springframework.aop.framework,
                org.aopalliance.aop,
                org.apache.cxf.bus.spring,
                com.mycompany.mypackage.that.i.am.using.classess.from,
                *
            </Import-Package>
        </instructions>
    </configuration>
</plugin>

バンドルプラグインの構成に、次のセクションを追加します。

<instructions>
    <Export-Package>your.bundle.main.package.*,
    </Export-Package>
    <Import-Package>com.db4o,
        *
    </Import-Package>
</instructions>

さまざまなパッケージが欠落していると、このようなエラーがさらに発生する可能性があります。したがって、それらすべてをセクションに追加するようにしてくださいImport-Package

他の注意点は、バンドルのパッケージを他のバンドルで使用している場合はエクスポートする必要があり、他のバンドルではバンドルのパッケージをインポートする必要があるということです。

于 2012-10-05T10:11:12.653 に答える