2012-05-03 18 views
9

私たちはいくつかのモジュール化を始めたいコンポーネントがたくさんあります。これらすべてのコンポーネントからバンドルを作成する最良の方法(私のビルド環境のコンテキストで)は何ですか?既存のJavaプロジェクトをosgiバンドルに変換する最も良い方法

私の環境:Java 6の、Mavenの2.2.1、ハドソン

技術:春の3.0.5は、WebSphere 7、3.2.xの休止状態とApacheコモンズのほとんど。

要件

  1. はわずか数のコンポーネントをモジュール化。残りのコンポーネントは、すべてのパッケージをエクスポートできます。
  2. Eclipseにインポートしたとき、私はビルド・パスの依存関係としてインポート・パッケージの束を見ることができるはずですが(MVN日食:日食これを行うにはいないようだ)

答えて

9

スタート。

あなたが問題を抱えていることとして、CIビルドとパッケージの種類は bundle(末尾参照)であれば、あなたは extensionssupportedProjectTypesを設定失敗MavenのリポジトリとのM2eを確保するのmaven-バンドル・プラグインを使用しました。

早い段階であなたの最もリスクの高いコア/外部依存関係をテストします - たとえば、あなたが永続化のためのJPAを使用している場合、プロバイダは、ドメインバンドルおよびJDBCドライバでOSGi環境で動作することを確認してください。

は、Java EE/Karafまたは乙女座で春を見てから移行している場合。しかし、あなたのコンポーネントが組み込みシステム用であるか、外部依存関係がない場合は、FelixまたはEquinoxで十分です(ただし、その場合はpax-urlプロジェクトをチェックしてください)。

は、ドメイン/技術について、もう少し具体的には、あなたの質問を編集する価値があるかもしれませんか?


は日食:Eclipseが唯一のプロジェクトが最初に設定されている場合、のM2eのライフサイクルの問題は、痛みのビットであるかもしれないことを生成しますが、それは昔のEclipseプラグインを使用するよりもはるかに良いです。


以下は、他の方法で変更することなく、既存の成果物にマニフェストエントリを追加します。 maven-bundle-pluginによって生成されたMANIFEST.MFを標準のmaven jarおよびwarプラグインに使用するよう指示します。

親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> 
+0

私はこれらのバンドルを実行する2つのオプションを持っています1)組み込みApache Felix witin WAR 2)Witin WAB –

+0

私は技術を使って投稿を更新しました。あなたはティコに挑戦しましたか? –

+0

非常に有益なポスト - POMのコンテンツは特に便利です、あなたにearcamありがとうございます。ユーザーへの注意:JAR上で実行している場合は、maven-war-pluginセクションをコメントアウトする必要があります。そうしないと、パッケージの目標は失敗します。 – KomodoDave

3

maven bundle pluginを使用してください。それはあなたのコードとpomで定義された依存関係をスキャンすることに基づいてマニフェストに必要なimport文とexport文を追加します。これは、変換するのに最小限の労力しか必要としません。日食:

は、私はまた、あなたの代わりにMVNの日食の M2Eclipseを使用することをお勧め。これはあなたの設定とワークスペースを同期させて保持します。彼らは明らかに魔法のように動作しませんが、それは良い非破壊第一歩だ - だけで、すべての成果物がバンドルなるようMANIFEST.MFエントリを変更することにより、

+0

しかし、m2eclipseにはmaven 3が付属しています。 –

+1

これは設定可能です。外部インストールに設定することができます。これはMaven2で動作する可能性があります。しかし、あなたはm2eとmaven-bundle-pluginでかなり良い走行距離を持っています – earcam

4

はbndtoolsを見て、それはそのラップのプロジェクトを作成するための優れたサポートを持っていますバンドル。 JARがどのように構造化され、どのように他のものに依存しているか、多くの洞察を提供します。

+0

bndtoolsは生成されたjarを自動的にmavenリポジトリに移動しますか?またはジャーはどのようにmvn repoに移動できますか? –

+0

かなり古いですが、bndtoolsとの所属を明らかにする価値があります – Flexo

+0

なぜ必要なのでしょうか?bndtoolsは製品ではありませんか? –