Googleのコード(SVN)とANT(ビルドタスク)からgit(GitHub)とmavenに移動したオープンソースプロジェクト(ps3mediaserver)に参加しています。私は自分のフォーク(pms-mlxと呼ばれている)を持っています。私はいくつかのプラグインをリリース時のデフォルトのパッケージ化の一部として維持したいと思っています。私はかなり新しく、プロジェクトがどのようにしてMavenの方法を尊重するように構成されるべきかについてはあまりよく分かりません。
環境がどのように以前のように動作していたかを説明してから、mavenへの移行についての考えを示します。パッケージ化マルチプラットフォームのマルチモジュールビルドプロジェクト
リンク:
- 旧:SVN + ANT ps3mediaserver project on google code
- 旧:SVN + ANT pms-mlx project on SourceForge
- 新:Git + Maven ps3mediaserver project on GitHub
- 新:Git + Maven pms-mlx project on GitHub
旧仕様:
プロジェクト構造:
+--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を参照しようとしましたが、決して成功しませんでした。
私が気づいた最初のことは、Mavenのベストプラクティスに反して、あなたのpomに多くのリポジトリを定義したことです。 – khmarbaise
アーティファクトを作成しないことについてのあなたのコメントのいくつかは間違っています:http://search.maven.org/#search%7Cga%7C1%7Ccom.jgoodies – khmarbaise
次は、あなたの依存関係がそれらを定義するあなたのroot-pomに定義すべきではありません代わりにDependencyManagementブロック内にあります。 (http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html)。 – khmarbaise