29

組織のMaven 2 リポジトリを維持することに関心があります。役立つポインタと落とし穴のいくつかは何ですか。

コードをリリースするときに、リポジトリからダウンロードしたり、リポジトリに独自のアーティファクトを公開するための標準を設定するときに、ユーザーが従うべきガイドラインは何ですか? この種のことに対して、どのような種類のガバナンス/ルールを設けていますか? 開発者向けガイド/ドキュメントには、それについて何を含めていますか?

更新: 私たちは Nexus を立ち上げ、非常に満足しています。Sal のガイドラインのほとんどに従い、問題はありませんでした。さらに、デプロイ アクセスを制限し、Hudson CI サーバーを介したスナップショット アーティファクトの自動ビルド/デプロイを行いました。Hudson は上流/下流のプロジェクトの依存関係をすべて分析できるため、コンパイルの問題、テストの失敗、またはその他の違反によってビルドが中断された場合、デプロイは行われません。2 つのバージョン間でメタデータが変更されているため、Maven2/Maven3 でスナップショットのデプロイを行うことにうんざりしてください。「Hudson のみ」のスナップショット展開戦略は、これを軽減します。Release プラグインは使用しませんが、Versions プラグインに関するいくつかの配管を作成しました。スナップショットをリリースに移動するとき。また、m2eclipse も使用していますが、設定ファイルから Nexus を確認でき、そこから検索するためにアーティファクト情報をインデックス化することを知っているため、Nexus と非常にうまく連携しているようです。(ただし、内部スナップショットを完全にインデックス化するために、これらの設定の一部を調整する必要がありました。) また、これを行うことに興味がある場合は、標準的な方法として、アーティファクトを含むソース jar をデプロイすることをお勧めします。これをスーパー POM で構成します。

UPDATE2 : このSonatypeホワイトペーパーに出くわしました。これには、Maven リポジトリ マネージャーの使用目標がそれぞれ異なる、採用/成熟度のさまざまな段階が詳述されています。

4

7 に答える 7

28

少なくとも 4 つのリポジトリを持つ 1 つの nexus サーバーをセットアップすることをお勧めします。アーティファクトはお勧めしません。nexus の無料バージョンは、3 つ未満のグループで 20 人未満の開発チームにはまったく問題ありません。それよりも多くのユーザーがいる場合は、Sonatype のリリースにお金を払ってください。LDAP 統合は、それ自体で採算が取れます。

  1. 内部リリース
  2. 内部スナップショット
  3. 外部ソースから取得した社内で使用されるコード、または承認されたサード パーティ バージョンの内部サード パーティ。クライアントやパートナーからの JDBC ドライバー、javax.* などをここに配置します。
  4. 外部プロキシm2、codehaus などのすべての通常のソースの共通プロキシ

内部リポジトリに対して次のことを行うように Nexus を構成する

  1. 古いスナップショットを定期的に削除する
  2. リリース時にスナップショットを削除
  3. インデックス ファイルを作成します。これにより、ローカルビルドも高速化されます

これら 4 つのソースのみを使用する共通の settings.xml ファイルを用意します。これを超えてカスタマイズする必要がある場合は、設定ファイルの共通部分を保持し、相違点にはプロファイルを使用してください。クライアントに独自の設定をロールさせないでください。そうしないと、コードが 1 つのマシンでビルドされ、他のマシンではビルドされないことになります。

クライアントに共通のプロキシを提供します。Nexus では、一般的な Maven ソース (Apache、JBoss、Codehaus) に多数のプロキシを追加し、単一のプロキシを内部クライアントに公開できます。これにより、クライアントからのソースの追加と削除がはるかに簡単になります。

内部およびサードパーティのアーティファクトを同じリポジトリに混在させないでください。Nexus では、Web GUI を介して内部リポジトリに jar を追加できます。JDBC ドライバーやその他の外部コードをサードパーティに追加する方法として、これをお勧めします。ほとんどのエンタープライズ ソフトウェアと比較すると、UI は非常に使いやすいです。

distributionManagementタグを使用して、内部スナップショットとリリース リポジトリを定義する共通の親 POMを定義します。多くの人がこれをしないように言っていることを私は知っています。これを行うにはあらゆる種類の問題があることを率直に認めますが、クライアントが単一の内部リポジトリにデプロイされるリリースとスナップショットのみを構築する場合は問題ありません。

既存の誤って管理された Maven リポジトリがある場合は、Legacyという名前の 5 番目のリポジトリを作成し、そこにリポジトリ全体を配置します。古いファイルが 1 年経過したらレガシーから削除するように cron タスクを設定します。これにより、誰もがそれをやめて自分の poms を更新するのに 1 年が与えられます。

内部アーティファクトの命名規則に固執しやすいものを確立します。Department.Function.Projectの GroupID とそのcomponentNameの ArtifactIdを好みます。内部リポジトリの場合、com/org/net と会社名は無関係である可能性があります。そして、会社がその名前を変更した場合は間違っています。販売部門、経理部門、または在庫部門の名前が変更される可能性はほとんどありません。

于 2009-10-30T15:13:32.217 に答える
7

間違いなくNexusを使用してください。:P

Nexus と Artifactory の両方を使用しました。Nexus のインターフェースはより堅牢で、より構成可能であり、もちろん、ほとんどすべての Maven をうまく表現している Sonatypeによって書かれています。

そうは言っても、Artifactory はまともで実行可能です。

于 2009-06-24T16:33:03.033 に答える
4

私はArtifactoryを自分で使用しており、ユーザーインターフェイスと展開/保守の容易さが大好きです。とは言うものの、私はNexusを使用したことがなく、適切な機能の比較を実際に行うことはできません。

Artifactoryについて私が本当に気に入っている点をいくつか紹介します(Nexusにもこれらの機能があることに注意してください)。

  1. 素晴らしいWeb2.0インターフェース。
  2. ローカルのMavenリポジトリーをインポートして開始する機能。
  3. セキュリティのために既存のLDAPサーバーとの統合が容易です(私は資格情報を格納するための単一のリポジトリの大ファンです)。

Mavenリポジトリの主要な実装は実際には2つしかないため、正しい選択をしたことを本当に確認したい場合は、両方を試して、どちらが良いかを自分で決めることをお勧めします。

于 2009-06-24T17:04:33.387 に答える
4

Artifactoryを使用します。

于 2009-06-24T16:20:46.657 に答える
3

考慮すべき他の何か:

http://archiva.apache.org/

于 2009-06-25T09:25:24.430 に答える
3

おそらくこれは明らかですが、再現性を確保するために、開発者はアーティファクトを上書きしてはならず、新しいバージョンにする必要があります。

これは上流のリポジトリにも当てはまります。Apache-commons バージョン 1.2.3 をダウンロードした場合は、二度とダウンロードしないでください。修正は新しいバージョンからのものであり、既存のバージョンには適用されません。

于 2009-06-24T16:16:30.760 に答える
3

元の質問(M2 リポジトリを構築する際に考慮すべき技術的な問題) として、リポジトリを閲覧するための読み取り専用ユーザーと、管理者ごとに管理ユーザーを作成することをお勧めします (つまり、管理されていないすべてのユーザーに対して 1 つの読み取り専用ユーザーを作成することをお勧めします)。管理者)。さらに、定期的に (おそらく 1 日 1 回?) バックアップ イメージを生成することをお勧めします。リポジトリが大きい場合、または独自のアーティファクトを時々インストールする場合の両方で非常に重要です。

最後になりましたが、新しいリモート リポジトリを追加するときは、包含/除外フィルターを追加して、リポジトリでのアーティファクト ルックアップがより迅速に行われるようにする必要があります。

考慮すべき問題は他にもたくさんありますが、Maven の内部リポジトリを管理しているときに遭遇した主な問題は次のとおりです。

記録のために、私は Nexus と Artifactory の両方を使用しています。Nexusは非常にシンプルで機能的ですが(Ubuntuでのインストールプロセスに問題がある場合があります)、その無料バージョンはArtifactoryのコミュニティ(無料)エディションと競合することはできません. Artifactory の素晴らしい Web 2 UI を除けば、セキュリティ管理、定期的なバックアップ、アクセシビリティの問題などの主な機能は、Nexus の機能をはるかに超えています。

于 2009-10-30T08:31:21.430 に答える