2017-07-14 15 views
0

Karafでは、バンドルが別のバンドルからプロパティファイルを読み取る方法はありますか?Karafのプロパティファイルを別のバンドルから読み取る

私はbundle2用途(bundle1が、それはその達人ポンポン経由のmaven-バンドル・プラグインとbundle2輸入でこれらのクラスを含むパッケージをエクスポート)いくつかのクラスが含まれていbundle1を、持っています。しかしbundle2bundle1のプロパティファイルを使用する必要があります。クラスに加えて、bundle2bundle1からファイルにアクセスできる方法はありますか?

私が読んだところでは、機能ファイルを介してkarafなどのフォルダにプロパティを展開し、青写真を介してbundle2からアクセスできます。可能であれば、bundle1は現在フィーチャーとしてデプロイされていないので、私はそれを避けたいと考えています。だから別のアプローチを期待しています。

答えて

2

最も良い方法は、bundle1のクラスを通してアクセスをラップすることです。 bundle1にMyClassという名前のクラスが含まれているとします。このクラスの中でthis.getClass()。getResourceAsStream(path)を実行できます。パスは、クラスのパッケージからの相対パスです。

このクラスのメソッドは、プロパティファイルのInputstreamを返すか、実際のプロパティへのアクセスを許可することができます。

実際、bundle2からプロパティファイルにアクセスすることもできます。 bundle2のクラスからMyClass.getResourceAsStream(path)を使用するだけです。これは、各クラスがデフォルトでは、それが常駐しているバンドルのクラスローダーによってロードされるときに機能します。

+0

Hm、あなたが提案したものを使用してバンドル(bundle1)からリソースファイルにアクセスできます。私はそれを... getClass()。getClassLoader()...)に変更しなければなりませんでした。しかし、別のバンドル(bundle2)からファイルにアクセスすると、私のためにnullが返されます。 –

+0

クラスローダーを取得するには、bundle1のクラスを使用する必要があります。 MyClass.getClass()。getClassLoader()のようにmyclassはbundle1にあります。これは任意のバンドルのどのクラスからでも行うことができ、bundle1のクラスローダーを取得します。 –

+0

OK、もう一度試してみます。しかし、... getClass()。getClassLoader()...、正しいことが必要ですか?あなたの答えが「getClassLoader()」の部分を残しているので、明確にしたいだけです。 –

関連する問題