私は、Google コード (SVN) と ANT (ビルド タスク用) から git (GitHub) と maven に移動されたオープン ソース プロジェクト ( ps3mediaserver ) に参加しています。私は独自のフォーク (pms-mlx と呼ばれる) を持っており、リリース時にいくつかのプラグインをデフォルトのパッケージの一部として維持したいと考えています。私はMavenにかなり慣れていないので、Mavenの方法を尊重するためにプロジェクトをどのように構成する必要があるのか よくわかりません。
環境が以前にどのように動作したかを説明することから始め、次に Maven への移行についての考えを述べます。
リンク:
- 旧: Google コードの SVN + ANT ps3mediaserver プロジェクト
- 旧: SourceForge の SVN + ANT pms-mlx プロジェクト
- 新規: GitHub の Git + Maven ps3mediaserver プロジェクト
- 新規: GitHub の Git + Maven pms-mlx プロジェクト
古い動作:
プロジェクトの構造:
+--workspace
+--plugins
+--plugin1
build.xml
+--plugin2
build.xml
+--ps3mediaserver_mlx
+--plugins
build.xml
メイン プロジェクトは ps3mediaserver_mlx で、すべてのプラグインはワークスペース/プラグイン フォルダーのサブフォルダーにあります。
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 インストーラー、OSX の場合は 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/
責任:
global-pom pms によって使用されるすべての依存関係を含むルート pom。これにより、どのプラグインでも再宣言せずに同じバージョンを使用できます (これは良い考えですか?)。すべてをビルドし、すべてのプロジェクトで同じ Maven コマンドを実行するモジュール セクションを含む
<modules>
<module>ps3mediaserver</module>
<module>plugins</module>
<module>pms-package</module>
</modules>
pms-pom : global-pom から継承し、pms jar をビルドします
plugins-pom : global-pom から継承します。pms の依存関係が含まれています (すべてのプラグインに必要です); ビルドする必要があるすべてのモジュールのリストが含まれています
pluginX-pom: plugins-pom から継承し、プラグインのカスタム構成を含みます
package-pom : ビルドされているプラットフォームに従って pms をパッケージ化する責任があります。
この構造は、maven の使用方法を表していますか?
すべてがパッケージングまで機能しています。これは、メイン アプリケーション jar とすべてのプラグインがビルドされ、パッケージ化する必要があることを意味します。package-pom はそれを行う責任があります。
元のアプリケーションにはpom.xmlが1 つしかなく、Windows、Linux、OS X 用に異なるプロファイルを使用してパッケージ化が行われています。ソース コードがアプリ ファイルにパッケージ化されることはありません。これは、パッケージ化プロジェクトが実際のプロジェクトから継承されなくなったためです。
アプリ ファイルに正しくパッケージ化するために、ビルドされた jar をどのように参照する必要がありますか?
additionalResources およびカスタム クラス パスとして jar を参照しようとしましたが、成功することはありませんでした。