すべてのアーティファクトがバンドルになるようにMANIFEST.MFエントリを変更することから始めます。これらは明らかに魔法のようには機能しませんが、非破壊的な最初のステップとして適しています。
maven-bundle-pluginを使用する場合は、必ず設定extensions
しsupportedProjectTypes
てください。CIビルドで問題が発生する可能性があるため、パッケージタイプがの場合はMavenリポジトリとm2eが失敗しますbundle
(最後を参照)。
最もリスクの高い/コアの外部依存関係を早い段階でテストします。たとえば、永続性にJPAを使用している場合は、プロバイダーがドメインバンドルとJDBCドライバーを使用してOSGi環境で動作することを確認します。
Java EE / springから移行する場合は、KarafまたはVirgoをご覧ください。ただし、コンポーネントが組み込みシステム用であるか、外部依存関係がない場合は、FelixまたはEquinoxで十分な場合があります(ただし、その場合はpax-urlプロジェクトを確認してください)。
ドメイン/テクノロジーについてもう少し具体的にするために質問を編集する価値があるかもしれませんか?
eclipse:eclipseは、プロジェクトが最初に構成されたときに、m2eのライフサイクルの問題が少し苦痛になる可能性があることを生成するだけですが、古いEclipseプラグを使用するよりもはるかに優れています。
以下は、他の方法で変更せずに、既存のアーティファクトにマニフェストエントリを追加します。これは、標準のmaven jarおよびwarプラグインに、maven-bundle-pluginによって生成されたMANIFEST.MFを使用するように指示します。
これを親POMに入れます。
<pluginManagement>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.7</version>
<extensions>true</extensions>
<configuration>
<archive>
<addMavenDescriptor>true</addMavenDescriptor>
</archive>
<supportedProjectTypes>
<supportedProjectType>jar</supportedProjectType>
<supportedProjectType>war</supportedProjectType>
</supportedProjectTypes>
<instructions>
<Built-By>${project.organization.name}</Built-By>
<Bundle-Vendor>${project.organization.name}</Bundle-Vendor>
<Bundle-ContactAddress>${project.organization.url}</Bundle-ContactAddress>
<Bundle-Description>${project.description}</Bundle-Description>
<Bundle-DocURL>${bundle.doc.url}</Bundle-DocURL>
<Bundle-Category>${bundle.category}</Bundle-Category>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Bundle-Version>${project.version}</Bundle-Version>
<Import-Package>*</Import-Package>
<Export-Package>*</Export-Package>
</instructions>
</configuration>
<executions>
<execution>
<id>bundle</id>
<goals>
<goal>manifest</goal>
</goals>
<phase>prepare-package</phase>
<inherited>true</inherited>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<archive>
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<executions>
<execution>
<id>create-war</id>
<phase>package</phase>
<goals>
<goal>war</goal>
</goals>
<inherited>true</inherited>
</execution>
</executions>
<configuration>
<archive>
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
</pluginManagement>
次に、子POMでは、次のようにするだけです。
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
</plugin>
<!-- Below is mutually exclusive: Either jar or war plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
</plugin>
</plugins>
</build>