9

私たちはたくさんのコンポーネントを持っていますが、そのうちのいくつかだけをモジュール化したいと思っています。これらすべてのコンポーネントからバンドルを作成するための(私のビルド環境のコンテキストでの)最良の方法は何でしょうか?

私の環境:Java 6、Maven 2.2.1、Hudson

テクノロジー:Spring 3.0.5、WebSphere 7、Hibernate 3.2.x、およびほとんどのApacheCommons。

要件

  1. 少数のコンポーネントのみをモジュール化します。残りのコンポーネントは、すべてのパッケージをエクスポートできます。
  2. Eclipseにインポートすると、インポートされたパッケージのバンドルがビルドパスの依存関係として表示されるはずです(mvn eclipse:eclipseはこれを行わないようです)
4

3 に答える 3

11

すべてのアーティファクトがバンドルになるようにMANIFEST.MFエントリを変更することから始めます。これらは明らかに魔法のようには機能しませんが、非破壊的な最初のステップとして適しています。

maven-bundle-pluginを使用する場合は、必ず設定extensionssupportedProjectTypesてください。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>
于 2012-05-03T19:25:12.183 に答える
4

Take a look at bndtools, it has excellent support for creating projects that wrap bundles. It provides a lot of insight how JARs are structured and how they depend on other things.

于 2012-05-04T12:14:32.823 に答える
3

Mavenバンドルプラグインを使用します。コードのスキャンとpomで定義された依存関係に基づいて、必要なインポートステートメントとエクスポートステートメントがマニフェストに追加されます。これにより、変換に必要な労力が最小限になります。

また、mvn eclipse:eclipseの代わりにM2Eclipseを使用することをお勧めします。これにより、Mavenの構成とワークスペースの同期が維持されます。

于 2012-05-03T18:29:14.040 に答える