3

カスタムの独自形式でパッケージをビルドするために、maven アセンブリ プラグイン バージョン 2.2.1 を使用しています。このプロセスの一環として、一連の外部アーカイブを抽出する必要があります (外部とは、maven の依存関係としてリストされていないことを意味しますが、ファイルシステム上の任意のファイルです)。

Mavenアセンブリがそれを実行できるかどうか知っていますか? 私が見たところ、明らかに、任意のフォルダーに多数の依存関係を抽出できますが、外部アーカイブを抽出することはできません。

4

2 に答える 2

3

を使用する<unpack>true</unpack>方法<dependencySet>です。

外部アーカイブは Maven ではサポートされていません。したがって、を使用してそれらを添付する必要があります。たとえばbuild-helper:attach-artifact、次の方法で参照できます<dependencySet>

アップデート

コメントの 1 つは、添付されたアーティファクトを Maven リポジトリ (ローカル/リモート) にインストールすることを回避する方法を知りたがっていました。

その解決策は、非推移的な依存関係であるダミー モジュールを使用することです。

構築中のアセンブリが推移的な依存関係として使用されていないことに依存しています。

したがって、次のようなダミー モジュールから始めます。

<project>
  ...
  <packaging>pom</packaging>
  ...
  <properties>
    <maven.deploy.skip>true</maven.deploy.skip>
    <maven.install.skip>true</maven.install.skip>
    <!-- or you could override the plugin configuration for a safer - but less quick - solution -->
  </properties>
  ...
</project>

そのダミーモジュールは、次を使用してファイルを添付できますbuild-helper:attach-artifacts

アセンブリ モジュールは、推移的な依存関係になることを防ぐために、依存関係<scope>provided</scope>を一覧表示するだけです。<optional>true</optional>(アセンブリがインストーラー バンドルであり、他の Maven ビルドによって消費されない場合は必要ありません。

圧縮されたコンテンツは 1 つのアーカイブから別のアーカイブにストリーミングされ、生ファイルはリモート リポジトリにコピーされませんが、アセンブリをビルドするリアクターで常にハックモジュールをビルドする必要があります。

于 2012-10-03T09:26:00.660 に答える
1

「ファイルシステム上の任意のファイル」は、Mavenの観点からはあまり意味がありません。

Maven Pomは、「マシン」、「統合サーバー(jenkins ...)」のどのポイントからでも実行できるはずです。Antは「自家製」ビルド用のツールであり、Mavenは設定より規約と再利用性を促進します。

したがって、プロジェクトが依存するリソースは、依存関係であるか、何らかの形でプロジェクトに含まれている必要があります。

単純なsvnチェックアウトで、すべてのプロジェクトがidとしてビルド可能になることを期待しています。プロジェクトにないものはすべて、mvnリポジトリからダウンロードする必要があります。

したがって、アセンブリプロジェクトを作成する必要がある場合は、プロジェクト内のすべてがリソースとして利用可能であることを確認します。そうでない場合は、いつでも共有リソース用の単純なプロジェクト/ pomを構築するか、それを行ういくつかの特別なプラグインを使用できます。

于 2012-10-03T10:04:58.330 に答える