web-dev-qa-db-ja.com

Gradleを使用した最初のOSGiビルドのマニフェスト-AntからGradleへの移行

最初にマニフェストはありますか http://wiki.osgi.org/wiki/Tooling_Approaches OSGi用のgradleプラグイン?または、gradleでそれを行う方法は?

MANIFEST.MFで宣言された複雑な関係を持つ多くのプロジェクトを含むOSGiコンテナー用の大きな古いプロジェクトがあります。ビルドが長いです。今、私たちは物事を単純化し、Gradleを採用したいと思います。しかし、最初は物事を壊さず、しばらくの間、antとgradleのビルドを並行して維持します。ただし、私が見ているのは、build.gradle内でMANIFESTを定義することを提案するgradleです。 https://docs.gradle.org/current/userguide/osgi_plugin.html
それは多くのコピー作業になります。

更新モジュール間およびネストされたjarの依存関係情報が多数ある、100近くのモジュールがあります。平均して、MANIFEST.MFの長さは約50行です(20から300行まで変化します)。ネストされたjarをバンドルする方法は 他の質問 です。この質問は、既存のMANIFEST.MFファイルの使用に関するものです。私が見たすべてのプラグインはbndを使用しますが、これはマニフェストの最初のアプローチとは正反対です。

26
Paul Verest

2016年4月の時点で、OSGiのMavenまたはGradleビルドツールにはマニフェストファーストのアプローチはありません。

Eclipseプラグイン(これは有効なOSGiバンドルでもあります)にはmaven/ tycho buildがありますが、これはEclipse Foundation内の標準ですが、一般的なOSGiプロジェクトにはあまり役立ちません。

マニフェストの反対-最初はマニフェスト生成であり、最初はマニフェスト作成用であったツールbndが1つだけあり、その後フルバンドルjarビルダーに成長し、現在は BndTools Eclipse統合 、依存関係を管理するMaven/Gradle統合に似ています。

bnd命令を外部標準のbnd.bndファイルに保持し、ビルドスクリプト内に配置しないことをお勧めします。 *.bndファイルは通常のJava .propertiesファイルに似ているため、EclipseではIDE右クリックして、[プログラムから開く]-> [その他]]をクリックします。 .. Properties File Editorを選択し、「このエディターを..に使用する」をチェックし、「このエディターをすべての「* .nbd」ファイルに使用する」をチェックします。

Gradle用

Mavenの場合

すべてのbndベースのツールは現在 collected on http://bnd.bndtools.org/chapters/700-tools.html

https://github.com/paulvi/OSGiBuildExamples にいくつかの例があります

注:リンク http://wiki.osgi.org/wiki/Tooling_Approaches は、「OSGi Community Wikiは残念ながらハッキングされており、現在利用できません。」ステータスに1週間以上ありますが、この質問はオープンしました。

悲しいことに、@ Richardは早すぎて諦め、感謝も受けられませんでした(Mavenについて言及したことに対して)

3
Paul Verest

GradleにはOsgiManifestクラスがあります。これは、拡張jarマニフェストです。

https://docs.gradle.org/current/javadoc/org/gradle/api/plugins/osgi/OsgiManifest.html

同様の使用法を示すStackOverflowの投稿があります:

ランタイム依存関係のインポートパッケージ命令を追加する方法は?

関連するgradleブロックは次のようになります。

apply plugin: 'Java'
apply plugin: 'osgi'

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

既存のマニフェストがあり、独自のカスタムファイルを使用したい場合は、jarクロージャー内でマニフェストファイルの場所を設定することでこれを行うことができます。

jar {
    manifest {
        def manif = "${resourcesDir}/MANIFEST.MF"
        if (new File(manif).exists()) {
            from file(manif)
        }
        else{
            name = 'overwrittenSpecialOsgiName'
            instruction 'Private-Package', 'org.mycomp.somepackage'
            instruction 'Bundle-Vendor', 'MyCompany'
            instruction 'Bundle-Description', 'Platform2: Metrics' 
        }
    }
}

Gradleのマニフェストのドキュメントはここにあります: https://docs.gradle.org/current/javadoc/org/gradle/api/Java/archives/Manifest.html

「その他の質問」の場合:

他のOSGIバンドルからの依存関係を含め、OSGIバンドルを構築するための追加のGradleプラグインがあります。

一例として、 Gradle Bundle Plugin があります。これは、bndツールを使用し、推移的な依存関係を含めるように指定したり、不要な依存関係を除外したりすることもできます。例として:

jar {
    manifest {
        attributes 'Implementation-Title': 'Bundle Quickstart',     // Will be added to manifest
                     'Import-Package': '*'  // Will be overwritten by the instuctions below
    }
}

bundle {
    includeTransitiveDependencies = true

    instructions << [
        'Bundle-Activator': 'foo.bar.MyBundleActivator',
        'Import-Package': 'foo.*',
        '-sources': true
    ]

    instruction 'Export-Package', '*' // Specify an individual instruction
    instruction '-wab', ''
}

Gradle osgi-runプラグイン もあります。これにはデフォルトで推移的な依存関係が含まれています。

dependencies {
    // all your usual dependencies
    ...

    osgiRuntime( "your:dependency:1.0" ) {
        transitive = false // transitive dependencies not included in OSGi runtime
    }
}

うまくいけば、それはあなたを動かすのに十分です。

10
pczeus