5

他の (サードパーティの) jar に依存するバンドルをいくつか作成したいと思います (これが良い方法であるかどうかは別のトピックです)。

gradle を使用して、fat jar (すべての依存 jar を含む) と osgi マニフェストを生成できます

私のプロジェクト レイアウトは jar を libs/ フォルダーに保存します jar を作成すると、サードパーティの jar (例: ibm.jar) が jar のルートにあります。

私のgradleタスクは、いくつかの基本的なosgi命令でosgiプラグインを使用しています。エクスポートパッケージのみをプログラムのパッケージとして手動で指定しましたが、他の3つのjarは指定しませんでした

ただし、そのバンドルをインストールしようとすると、エラーが表示されます

Error starting file:****.jar (org.osgi.framework.BundleException: Unresol
ved constraint in bundle ***** [24]: Unable to resolve 24.0: missi
ng requirement [24.0] osgi.wiring.package; (osgi.wiring.package=com.ibm.mq))
org.osgi.framework.BundleException: Unresolved constraint in bundle **** [24]: Unable to resolve 24.0: missing requirement [24.0] osgi.wiring.package; (osgi.wiring.package=com.ibm.mq)
        at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:382
6)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:1868)
        at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1191)

        at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStart
LevelImpl.java:295)
        at java.lang.Thread.run(Unknown Source)

グラドル

task makeJar(type: Jar) {

from { 'libs/'}
manifest = osgiManifest {
        classesDir = sourceSets.main.output.classesDir
        classpath = sourceSets.main.runtimeClasspath
        instruction 'Export-Package','abc.def'  
        instruction 'Bundle-Vendor', 'ABC'
        instruction 'Bundle-Activator', 'abc.def.Activator'
        instruction 'Bundle-ClassPath', '.,*.jar'
        instruction 'Include-Resource', '@**/*.jar'
    }
}

以下で試しましたが、うまくいきません.gradleの問題のようです http://issues.gradle.org/browse/GRADLE-1107

'Include-Resource', 'libs/'

それらをクラスパスに明示的に設定しようとしましたが、問題は解決しません

Bundle-ClassPath: '.,*.jar' 

必要なパッケージ (com.ibm.mq) が Import-Package にあることがわかります。これは正しいですか?

私の質問は次のとおりです。正しいマニフェストは何ですか? Gradle (BND に基づく) は依存関係を理解し​​、マニフェストを自動的に作成できますか?もしそうなら、必要なセットアップは何ですか?

編集:このような私のgradle命令では、同じエラーが発生しています(マニフェストにもバンドルクラスパスが表示されることを確認しました)

instruction 'Bundle-ClassPath', """.,felix.jar,org.springframework.aop-3.0.5.RELEASE.jar,org.springframework.asm-3.0.5.RELEASE.jar,c3p0-0.9.1.2.jar,com.springsource.net.sf.cglib-2.2.0.jar,org.springframework.context-3.0.5.RELEASE.jar,org.springframework.transaction-3.0.5.RELEASE.jar,com.ibm.mqjms.jar,org.springframework.beans-3.0.5.RELEASE.jar,org.springframework.core-3.0.5.RELEASE.jar,commons-io-1.4.jar,org.springframework.expression-3.0.5.RELEASE.jar,ojdbc14.jar,org.springframework.jdbc-3.0.5.RELEASE.jar,connector.jar,commons-lang-2.4.jar,commons-logging.jar,com.ibm.mq.jar,log4j-1.2.15.jar,org.springframework.web-3.0.5.RELEASE.jar"""
4

1 に答える 1

3

Bnd はディレクトリやファイルにワイルドカードを使用しません (正当な理由により)。ファイルでワイルドカード展開が必要な場合は、${lsa;(dir);(match)} マクロを使用します。詳細については、www.aqute.biz/Bnd を参照してください。

于 2012-10-29T08:11:42.903 に答える