2

Mavenに、マシンにインストールされているアーティファクトではなく、リモートアーティファクトを使用させる方法はありますか?コンパイルエラーではなくランタイムエラーを心配しているので、ビルドサーバーは有効なオプションではありません。

PS .m2フォルダーを削除または名前変更できることはわかっていますが、これを行うにはもっと賢い方法があるに違いありません。たぶんプラグインや特別なコマンドパラメータ?

4

2 に答える 2

7

ローカル リポジトリがないということは、クラスパスがほぼ完全にリモート サーバー上の URL で構成されていることを意味します。実行がひどく、接続が切断されるとクラスローダーの問題が発生するため、これがサポートされる理由がわかりません。ローカル リポジトリを使用すると、コンパイル/実行が開始される前に jar を利用できるようになります。

また、WAR および EAR プロジェクト (および依存関係プラグインを使用する多くのプロジェクト) は、パッケージ化を完了するために jar をダウンロードすることに依存していることを考慮してください。ビルドごとにリモート リポジトリからこれらを取得する必要がある場合、膨大なオーバーヘッドが発生します。中央の管理者は、その負荷に対処することに熱心ではないと確信しています。

考慮すべきいくつかの代替案:

  • ビルドごとにクリーンなローカル リポジトリを強制する場合は、依存関係プラグインのパージゴールを使用できます。
  • ビルドを分離したままにしたい場合は、 -Dorg.apache.maven.global-settings=/path/to/global/settings.xml を渡すことで、別の Maven 設定を使用できます。
  • または、 -Dmaven.repo.local=/some/repo/path を渡すことで、ビルドごとにローカル リポジトリをオーバーライドできます。
  • ビルドごとにリモート リポジトリにヒットするのを避けたい場合は、リモート リポジトリの構成に <updatePolicy>never</updatePolicy> を追加します。これは、コマンドラインで「-U」スイッチを使用して強制的に実行した場合にのみ、Maven が更新をチェックすることを意味します。
  • 依存関係の最新バージョンを取得する場合は、バージョン宣言で (バージョン番号の代わりに) LATEST キーワードを使用できますが、依存関係に互換性がない場合は危険です。
  • 依存関係の現在のリリース バージョンを使用する場合は、バージョン宣言で (バージョン番号の代わりに) RELEASE キーワードを使用できます。これは LATEST に似ていますが、最新ではなく、最新の安定したビルドになる傾向があります。
  • ある範囲内の依存関係の最新バージョンを取得する場合は、Maven のバージョン範囲表記を使用します。たとえば、[1.0.0,2.0.0) は、1.0.0 を含めて 2.0.0 を含まない任意のバージョンを意味します。

LATEST と RELEASE の詳細については、Maven book のセクション 9.3.1.3 を参照してください。

内部レポジトリ マネージャ (ここでは必須のNexusおよびArtifactory参照) を使用すると、ローカル レポジトリをパージするオーバーヘッドが大幅に削減されます。ローカル ネットワーク トラフィックの負荷が増加するだけです。

于 2009-07-23T13:49:00.953 に答える
0

私はあなたが求めていることをする方法が本当にあるとは思いません。SNAPSHOTのリリースに応じて調べることができます(ただし、アップストリームプロジェクトのバージョン文字列をSNAPSHOTバージョンに変更することを意味します)。

ちなみに、これは最近のJava Posseエピソード(#268)で詳細に議論されました。彼らが解決策に終わったとは思いませんが、そこにいくつかの良いアイデアが得られるかもしれません。

私はまた、私が自分自身で調べているリッチセラーのアイデアのいくつかが好きです。

于 2009-07-23T15:02:01.873 に答える