0

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

リンク:

古い動作:

プロジェクトの構造:

    +--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 を参照しようとしましたが、成功することはありませんでした。

4

1 に答える 1

1

たとえば、plugins/pom.xml で依存関係を定義しました。

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

これはあなたの親を正確に表しています。つまり、すでに親として定義されている依存関係を定義するのは間違っています。

project タグの直後、parent タグの前に modelVersion タグを配置することをお勧めします。親タグの後に、artifactId などの現在のモジュールの情報を配置します。

プロジェクトに飛び込んだ後、プラグイン/WebservicePlugin で定義されていることに気付きました。

<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>

これは、マルチモジュール ビルドの Maven の方法に反します。この場合、別のバージョンを定義しないでください。次のようになります。

<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>

WebservicePlugin モジュールのバージョンに基づいて問題が発生した場合は、WebservicePlugin を残り (他のプラグインも同様) から分離することを検討する必要があります。

多くのプラグイン (すべてではないにしても) で構成と maven-compiler-plugin の使用法を定義したことに気付いたもう 1 つのこと...これは、ルート pom の pluginManagement 部分を使用して行う必要があります。 ...プロジェクトのメンテナンスを簡単にします。

作成された plugins-jar を maven-antrun プラグインを介して別の場所にコピーすることは、別の方法で行う必要があります。親によって継承されるため、すべてのプラグインでライセンス エントリを繰り返す必要はありません。

于 2012-04-05T12:01:01.243 に答える