2

Karafを使用しようとしていますが、ApacheMavenCentralリポジトリから推移的な依存関係をプルするように設定できるかどうか疑問に思いました。「埋め込みバンドル」を使用する必要はありません

明示的な依存関係を引き出すことができることはすでに知っています。質問の重要な部分は「推移的な」依存関係です。

また、OBRを使用してデプロイされたサイトのrepository.xmlファイルから読み取ることができることも知っていますが、MavenCentral用のファイルが見つかりません。質問に対する考えられる答えはURLを追加することですが、repository.xmlのURLが何であるかについてはどこにも文書化されていません。

現時点では、私の回避策は、依存関係が何であるかを把握し、それらを明示的に追加することです。

埋め込まれたバンドルは、Karaf OSGiブループリントの実装では機能しません(存在しないものを待つだけです)。それをしなければならないのも醜いです。この質問に対して私が考えることができるもう1つの可能な答えは、必要なすべての依存関係を含む任意のOSGiコンテナー(KARファイルを使用するKarafだけでなく)にデプロイできるパッケージを作成するための指示があったかどうかです。

4

3 に答える 3

3

karaf-maven-plugin を使用して、maven の依存関係から機能ファイルを作成できます。これにより、推移的な依存関係が解決されます。

于 2012-06-03T11:52:48.583 に答える
2

Maven を使用して比較的 OSGi 標準的な方法でこれを行う方法を見つけました。maven-dependency-plugin を使用して、ランタイム スコープで必要な依存関係のみを含むリポジトリを作成します。

次に、maven-bundle-plugin:index ゴールが実行され、repository.xml ファイルが作成されます。

ターゲットのこの時点で、有効な obr リポジトリができました。必要に応じて maven-assembly-plugin を使用してパッケージ化できます。

次の pom.xml スニペットは、必要なことを行います。

        <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-runtime-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <copyPom>true</copyPom>
                        <useRepositoryLayout>true</useRepositoryLayout>
                        <includeScope>runtime</includeScope>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <executions>
                <execution>
                    <id>index</id>
                    <goals>
                        <goal>index</goal>
                    </goals>
                    <phase>verify</phase>
                    <configuration>
                        <mavenRepository>${project.build.directory}/dependency</mavenRepository>
                    </configuration>
                </execution>
            </executions>
        </plugin>

Karaf に関しては、次のコマンドを使用して、Karaf の feature.xml を使用せずに、このバンドルとその推移的な依存関係をインストールできます。

features:install obr
obr:addUrl [location of the OBR repository, can be file:///....]
obr:deploy [symbolicname-of-bundle]
start [symbolicname-of-bundle]

そして出来上がり。

これは、指定したバンドルによって参照されるバンドルのみをロードすることに注意してください。そのため、理論的には他のバンドルについて認識すべきではないブループリントのようなものを使用している場合は、それらを明示的に展開するか、あなたが持っているバンドル (機能/製品など) を含む uber バンドル

于 2012-06-12T00:03:31.027 に答える
1

私の知る限り、Mavenを使用してすべての依存関係をダウンロードしてから、Felix bndプラグインを使用して、ローカル(またはリモート)リポジトリをKarafで使用できるOBRに変換するのが最善の方法です。

于 2012-06-03T06:20:47.517 に答える