最初にマニフェストはありますか 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
を使用しますが、これはマニフェストの最初のアプローチとは正反対です。
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」ファイルに使用する」をチェックします。
Include-Resource
が機能していません" 2010年から未解決の問題ですosgi-run
"Osgi-Run-OSGiを使用したモジュラーアプリケーションの開発を完全に無痛にするGradleプラグイン"maven-bundle-plugin
aka Apache Felix Mavenバンドルプラグイン(BND) は 「Mavenファースト」アプローチbnd-maven-plugin
発表と2つのプラグインの比較すべての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について言及したことに対して)
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
}
}
うまくいけば、それはあなたを動かすのに十分です。