2012-03-27 8 views
0

Googleのコード(SVN)とANT(ビルドタスク)からgit(GitHub)とmavenに移動したオープンソースプロジェクト(ps3mediaserver)に参加しています。私は自分のフォーク(pms-mlxと呼ばれている)を持っています。私はいくつかのプラグインをリリース時のデフォルトのパッケージ化の一部として維持したいと思っています。私はかなり新しく、プロジェクトがどのようにしてMavenの方法を尊重するように構成されるべきかについてはあまりよく分かりません。
環境がどのように以前のように動作していたかを説明してから、mavenへの移行についての考えを示します。パッケージ化マルチプラットフォームのマルチモジュールビルドプロジェクト

リンク:

旧仕様:

プロジェクト構造:

+--workspace 
     +--plugins 
      +--plugin1 
      build.xml 
      +--plugin2 
      build.xml 
     +--ps3mediaserver_mlx 
      +--plugins 
      build.xml 

主なプロジェクトはps3mediaserver_mlxで、すべてのプラグインは、ワークスペース/ pluginsフォルダのサブフォルダに住んでいます。
ps3mediaserver_mlx/build.xmlには、メインプロジェクトのjarをビルドし、workspace/pms_no_libs.jarにコピーして、プラグインによって(この場所で)参照されるターゲットBuildWithoutLibsが含まれています。
プラグインのビルドターゲットを実行すると、プラグインがビルドされ、生成されたjarがps3mediaserver_mlx/plugins/[plugin_name] .jarにコピーされます。
最後に、ps3mediaserver_mlx/build.xmlのビルドターゲットを使用してアプリケーションをパッケージ化すると、workspace/ps3mediaserver_mlx/pluginsに含まれるプラグインがパッケージ化されます(Windowsの場合はexeインストーラ、Linuxの場合はdmg、Linuxの場合はtar.gz) 。

+-- workspace/ 
+-- pom.xml (global-pom) 
+-- ps3mediaserver/ 
| +-- pom.xml (pms-pom) 
| +-- src/ 
|   ... 
+-- plugins/ 
| +-- pom.xml (plugins-pom) 
| +-- Plugin1/ 
     | pom.xml (plugin1-pom) 
     | src/ 
| +-- Plugin2/ 
     | pom.xml (plugin2-pom) 
     | src/ 
+-- pms-package/ 
    +-- pom.xml (package-pom) 
    +-- src/main/assembly/ 
    +-- src/main/external-resources/ 

Responsabilities:
global-pom PMSによって使用されるすべての依存関係を含むルートポンポン

新しい行動 プロジェクト構造は、これに変更されました。これにより、プラグインで再宣言することなく同じバージョンを使用できます(これは良い考えですか?)。すべてを構築し、すべてのプロジェクト

<modules> 
    <module>ps3mediaserver</module> 
    <module>plugins</module> 
    <module>pms-package</module> 
</modules> 

pms-pomに同じMavenのコマンドを実行するためのモジュールセクションが含まれています:PMSは

plugins-pomをjarファイルandbuildsグローバル-POM継承元:グローバル-POMから継承。 pms(すべてのプラグインで必要となる)用の依存関係を含んでいます。

pluginX-POMを構築することが持つすべてのモジュールのリストが含まれています:プラグイン-POMを継承しており、プラグイン

package-pomのためのカスタム設定が含まれています。それが構築されているプラ​​ットフォームに応じてPMSをパッケージ化する責任がありますに。

この構造は、使用する方法を表していますか?

すべてがパッケージ化されています。これは、メインアプリケーションjarとすべてのプラグインがビルドされ、パッケージ化される必要があることを意味します。 package-pomはこれを行う責任があります。
オリジナルのアプリケーションにはpom.xmlが1つしかなく、パッケージはWindows、Linux、OS Xの異なるプロファイルを使用して行われています。私が現在取り組んでいるのはOSX用でosxappbundle-maven-pluginを使用していますが、 appファイルにパッケージ化されています。これは、パッケージングプロジェクトが実際のプロジェクトを継承していないためです。
アプリケーションファイルに正しくパッケージ化されるためには、ビルドされたjarをどのように参照するのですか?
私は、additionalResourcesとカスタムクラスパスとしてjarを参照しようとしましたが、決して成功しませんでした。

+0

私が気づいた最初のことは、Mavenのベストプラクティスに反して、あなたのpomに多くのリポジトリを定義したことです。 – khmarbaise

+0

アーティファクトを作成しないことについてのあなたのコメントのいくつかは間違っています:http://search.maven.org/#search%7Cga%7C1%7Ccom.jgoodies – khmarbaise

+0

次は、あなたの依存関係がそれらを定義するあなたのroot-pomに定義すべきではありません代わりにDependencyManagementブロック内にあります。 (http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html)。 – khmarbaise

答えて

1

あなたは正確にあなたの親を表しプラグイン/のpom.xml

<dependencies> 
    <dependency> 
    <groupId>net.pms</groupId> 
    <artifactId>pms-mlx</artifactId> 
    <version>1.52.1_mlx_v0.8-SNAPSHOT</version> 
    </dependency> 
</dependencies> 

に例えば依存関係を定義しています。つまり、すでに親として定義されている依存関係を定義するのは間違いです。

modelVersionタグをプロジェクトタグの直後と親タグの前に配置することをお勧めします。親タグの後にartifactIdのような情報を現在のモジュールに入れます。

プロジェクトにダイビング後、私はあなたがあなたのプラグイン/ WebservicePluginの中で定義されていることに気づい:マルチモジュールのビルドのためにMavenの道に反している

<modelVersion>4.0.0</modelVersion> 
<artifactId>WebservicePlugin</artifactId> 
<version>3-SNAPSHOT</version> 
<packaging>jar</packaging> 

<parent> 
    <groupId>net.pms</groupId> 
    <artifactId>pms-plugins</artifactId> 
    <version>1.52.1_mlx_v0.8-SNAPSHOT</version> 
</parent> 

。この場合、別のバージョンを定義すべきではありません。あなたは(だけでなく、他のプラグインでもよい)残りの部分からWebservicePluginを分離について考える必要があるよりも、WebservicePluginモジュールのバージョンに基づいて問題が発生した場合は

<modelVersion>4.0.0</modelVersion> 

<parent> 
    <groupId>net.pms</groupId> 
    <artifactId>pms-plugins</artifactId> 
    <version>1.52.1_mlx_v0.8-SNAPSHOT</version> 
</parent> 
<artifactId>WebservicePlugin</artifactId> 

:それは次のようになります。

maven-compiler-pluginの設定と使用法のプラグインの多く(多くの場合はそうでないものとして)で定義されていることに気がついたことの1つです...これはpluginManagementパートあなたのプロジェクトのメンテナンスを簡単にするために

作成されたプラグイン - jarsをmaven-antrunプラグインを介して別の場所にコピーすると、別の作業が実行される可能性があります。 すべてのプラグインでライセンスエントリを繰り返す必要はありません。なぜなら、それは親によって継承されているからです。

+0

説明してくれてありがとう!プロセスのすべての間違いで、それを修正するには時間がかかるでしょう;)私は特定の部分と他の主なプロジェクトを担当しています。 – Philippe

関連する問題