0

OSGI バンドルとしてデプロイする方法を理解しようと数日を費やしましたが、助けが必要です。servicemix 4.5.2、maven 3.1.0、maven-bundle-plugin 2.4.0 を使用しています。.pom に次のタグを追加しました

<Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>    
<Embed-Transitive>true</Embed-Transitive>

バンドルがビルドされ、servicemix にデプロイすると、一連の BundleExceptions が発生します。壁にぶつかるまで、不足しているパッケージを pom に繰り返し追加します。「要件パッケージがありません; (package=com.ibm.ejs.ras)」. 当面の問題は、ダウンロードする ras.jar または Maven リポジトリーが見つからないことです。しかし、より大きな問題は、私が何か間違ったことをしているために、推移的な依存関係を手動で追跡しなければならなくなったことだと思います。

よく調べてみたところ、Spring と Fuse の事前にバンドルされたバージョンを使用することで、一般的な問題が解決されていることがわかりました。Fuse リポジトリは消えてしまったようで、Spring リポジトリは日が沈んでいるようで、必要なすべての .jar がありません。また、別の投稿で見た bundleall maven-bundle-plugin も試しましたが、目標は現在非推奨です)。その結果、「プロジェクト org.beanshell:bsh-core の OSGi バンドルの生成エラー: aQute.bnd.osgi.Descriptors$PackageRef を java.lang.String にキャストできません」という結果になりました。

以前の (OSGI 以前の) バージョンの servicemix と camel を使用しており、両方の製品を高く評価しています。しかし、私は OSGI のハードルを乗り越えようとして気力 (および作業時間) を失っており、Mule はより魅力的になっています。誰かがいくつかの洞察を持っているなら、彼らは大歓迎です.

ありがとうございました。

私のポン:

<?xml version="1.0" encoding="UTF-8"?>
<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>
    <groupId>com.mycompany.abc</groupId>
    <artifactId>core</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

<artifactId>myartifact</artifactId>
<packaging>bundle</packaging>
<name>myartifact</name>

<dependencies>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-spring</artifactId>
        <version>${camel.version}</version>         
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-mail</artifactId>
        <version>${camel.version}</version> 
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-dao</artifactId>
        <version>2.0.8</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.0.1</version>
    </dependency>
    <dependency>
        <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>1.4</version>
        <scope>compile</scope>
    </dependency> 
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>2.35.0</version>
    </dependency>           
</dependencies>

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <version>2.4.0</version>    
        <extensions>true</extensions>
        <configuration>
          <instructions>
            <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
            <Bundle-Description>${project.description}</Bundle-Description>
            <Export-Package>com.mycompany.abc.myartifact</Export-Package>
            <Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>    
            <Embed-Transitive>true</Embed-Transitive>
          </instructions>
        </configuration>
      </plugin>
    </plugins>          
</build>

4

1 に答える 1

0

com.ibm.ejs.ras はおそらく、バンドルした JARS の 1 つに対するオプションの依存関係です。

Import-Package を更新して、問題のあるパッケージを除外します。

<Import-Package>!com.ibm.ejs.ras, *</Import-Package>.

また:

Embed-Dependency は内部で Bundle-Classpath を使用します。これを可能にするツールの作成者に任せたいと思います: http://www.aqute.biz/Bnd/FAQ#bundleclasspath

とにかく、この場合に必要なものの90%が付属するServiceMixを使用していることを考えると、この場合、Embed-Dependencyは絶対に必要ないことに間違いなく同意します。残りは、mvn: または wrap:mvn: style-urls を使用して ServiceMix 自体にインストールできます。(これは dbcp と lang3 と Selenium のみです)

于 2013-10-21T02:48:12.940 に答える