1

私はバージョン管理システム(git)に小さなJavaプロジェクトを持っており、4人の開発者が共有しています。このプロジェクトでMavenをビルドツールとして使用することを考えています。

依存関係の管理は必要な機能ですが、私は望んでいません:-依存関係の自動更新(これは私のソフトウェアを壊す可能性があるため)。-インターネット接続に依存してリモートリポジトリから依存関係をダウンロードし、コードをコンパイルできるようにします。

したがって、質問:

1)ローカル依存関係(VCSで共有されるjarなど)を使用するようにMavenを構成できますか?複数のプロジェクト間で複数の依存関係を共有しておらず、依存関係が更新されることはめったにないため、Mavenリポジトリーを使用する価値はありません。

2)Mavenリポジトリを使用することを選択した場合、ローカルネットワークで構成できますか?リモートリポジトリミラーまたはリモートリポジトリへのポータルは必要ありません。ローカルネットワークのサーバーにある、依存関係のあるスタンドアロンリポジトリが必要です。

3)リモートリポジトリでデフォルトのMavenアプローチを使用する場合、すべての依存関係が最初にダウンロードされた後に依存関係の更新をオフにできますか?

助けてくれてありがとう。

4

3 に答える 3

3

答え 1:

はい、できます。システムスコープの依存関係をグーグルで検索しますが、重要な機能の1つを削除するため、これを行うことはお勧めできません。

<dependency>
  <groupId>com.mycompany</groupId>
  <artifactId>app-lib</artifactId>
  <version>3.1.0</version>
  <scope>system</scope>
  <systemPath>${project.basedir}/libs/app-lib-3.1.0.jar</systemPath>
</dependency>

2 への回答:

はい、できます: - Artifactory - Nexus

3 への回答:

はい、できます。その場合、 ---offline フラグを使用するか、より良いアプローチを使用できます: すべての依存関係を解放します。

いくつかの考え: 依存関係管理を使用せずに依存関係管理システムを使用したいというのは、私には奇妙に聞こえます。

ライブラリ内の変更によってコードが壊れる恐れがある場合は、SNAPSHOT を使用しないでください。ある種のバージョンスキームを試してください。を使用しております

xyz

  • リリースで z が変更された場合、jar は互換性があるはずです。
  • y が変更された場合は、youz コードを変更する必要があります
  • xが変更された場合...まあ、すべてを更新する必要があります。
于 2012-08-07T17:25:09.827 に答える
1

インターネット接続に依存しているというあなたの懸念はもっともですが、あなたが思っているほど悪くはないと思います。

依存関係が中央リポジトリからダウンロードされると、ハード ドライブ (「~/.m2/repository」にある) のキャッシュに保存されます。それ以降は、キャッシュ内のコピーが使用され、アプリケーションのコンパイルにインターネット接続は必要なくなります。

Maven で最初のプロジェクトをコンパイルするときは、大量のものをダウンロードする必要があります。しかし、その後のすべてのコンパイルははるかに高速になり、何もダウンロードする必要がなくなります。

また、Maven のバージョニング スキームにより、依存関係のすべての「リリース」バージョンは、いったん中央リポジトリにデプロイされると変更できなくなります。たとえば、「commons-io」のバージョン「2.2」を使用している場合、このバージョンのライブラリは常に同じままであることがわかっています。新しいバージョンをリリースせずに変更を行うことはできません。

ただし、「スナップショット」のバージョンは変更される可能性があります。ライブラリのバージョンがスナップショットの場合は、「-SNAPSHOT」で終わります (たとえば、「1.2-SNAPSHOT」は、ライブラリが最終的に「1.2」としてリリースされることを意味します)。ただし、Central リポジトリではスナップショット ビルドは許可されていないと思います。いずれにせよ、それらを本番コードで使用しないでください。

于 2012-08-07T18:06:56.963 に答える