7

Gradle を使用して OSGi jar を作成していますが、マニフェストに少し問題があります。これが私のビルドスクリプトからの抜粋です:

apply plugin: 'java'
apply plugin: 'osgi'

jar {
    baseName = 'awesome'
    manifest {
        name = 'An Awesome Application'
        symbolicName = 'com.example.awesome'
//        instruction 'Import-Package', 'org.springframework.orm'
    }
}

上記を使用して、Gradle は依存関係を検出Import-Packageし、コンパイル時のすべての依存関係と共に を追加します。しかし、私のアプリケーションにもランタイム依存関係があるとorg.springframework.ormしたら、それを Gradle に引数として含めるように指示するにはどうすればよいImport-Packageでしょうか?

上記のコメント化された行のコメント化を解除すると、生成されたImport-Package命令はのみ org.springframework.ormを指定します。OsgiManifestのGradleドキュメントには次のように記載されているため、これは私を混乱させます

OsgiManifest instruction(String name, String... values)

命令に引数を追加します。命令が存在しない場合は、作成されます。存在する場合、引数は既存の引数に追加されます。

Import-Packageただし、これは自動検出された引数には適用されないようです。などを指定instruction 'Import-Package', 'my.dependency.1'して途中で出力すると、順番に追加されていく様子が分かり、生成されたマニフェストに全て表示されるのですが、GradleのOSGiプラグインは手動で指定jar.manifest.instructionsすると自動検出された引数を追加しないようですImport-Package.

TL;DR:

  • 命令を手動で指定しない場合Import-Package、コンパイル時の依存関係はすべて自動生成されますが、実行時の依存関係は含まれません。
  • 私が行う場合manifest { instruction 'Import-Package', 'org.springframework.orm' }、コンパイル時の依存関係は自動的に含まれません。

に追加できるように、ランタイムの依存関係を Gradle に伝えるにはどうすればよいImport-Packageですか?

4

1 に答える 1