maven-3がスナップショットアーティファクトの<uniqueVersion> false </ uniqueVersion>のサポートを終了したため、タイムスタンプ付きのSNAPSHOTSを実際に使用する必要があるようです。特に、内部でmaven 3を使用するm2eclipseは影響を受けているようですが、SNAPSHOTSが一意でない場合、update-snapshotsは機能しません。
以前は、すべてのスナップショットをuniqueVersion = falseに設定するのがベストプラクティスのようでした。
現在、タイムスタンプ付きバージョンに切り替えることは大きな問題ではないようです。結局、それらは中央のネクサスリポジトリによって管理されており、定期的な間隔で古いスナップショットを削除できます。
問題は、ローカルの開発者ワークステーションです。彼らのローカルリポジトリは、ユニークなスナップショットですぐに非常に大きくなります。
この問題に対処する方法は?
今、私は次の可能な解決策を見ています:
- 開発者に定期的にリポジトリを削除するように依頼します(削除に時間がかかり、必要なものすべてをダウンロードするのにさらに時間がかかるため、多くのフラストレーションが発生します)
- ローカルリポジトリからすべてのSNAPSHOTディレクトリを削除するスクリプトを設定し、開発者にそのスクリプトを時々実行するように依頼します(最初のスクリプトよりも優れていますが、現在のスナップショットの実行とダウンロードにはかなりの時間がかかります)
- 依存関係:purge-local-repositoryプラグインを使用します(ファイルが開いているため、Eclipseから実行すると問題が発生し、各プロジェクトから実行する必要があります)
- すべてのワークステーションにネクサスをセットアップし、古いスナップショットをクリーンアップするジョブをセットアップします(最良の結果ですが、50以上のネクサスサーバーを維持したくありません。さらに、開発者のワークステーションではメモリが常に不足しています)
- SNAPSHOTSの使用を完全に停止します
ローカルリポジトリがハードドライブのスペースをいっぱいにしないようにするための最良の方法は何ですか?
更新:
動作を確認し、より多くの情報を提供するには、小さなネクサスサーバーをセットアップし、2つのプロジェクト(aとb)をビルドして、次のことを試してください。
a:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.glauche</groupId>
<artifactId>a</artifactId>
<version>0.0.1-SNAPSHOT</version>
<distributionManagement>
<snapshotRepository>
<id>nexus</id>
<name>nexus</name>
<url>http://server:8081/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
</project>
b:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.glauche</groupId>
<artifactId>b</artifactId>
<version>0.0.1-SNAPSHOT</version>
<distributionManagement>
<snapshotRepository>
<id>nexus</id>
<name>nexus</name>
<url>http://server:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
<repositories>
<repository>
<id>nexus</id>
<name>nexus</name>
<snapshots>
<enabled>true</enabled>
</snapshots>
<url>http://server:8081/nexus/content/repositories/snapshots/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>de.glauche</groupId>
<artifactId>a</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
これで、Mavenを使用して、「a」で「deploy」を実行すると、次のようになります。
a-0.0.1-SNAPSHOT.jar
a-0.0.1-20101204.150527-6.jar
a-0.0.1-SNAPSHOT.pom
a-0.0.1-20101204.150527-6.pom
ローカルリポジトリ内。デプロイターゲットを実行するたびに、新しいタイムスタンプバージョンを使用します。ネクサスサーバーからスナップショットを更新しようとすると同じことが起こります(「a」プロジェクトを閉じ、ローカルリポジトリから削除し、「b」をビルドします)
スナップショットの多くはビルドを取得する環境では(ハドソンサーバー...と思う)、ローカルreposiotyは、古いバージョンでいっぱいに速いです
アップデート2:
これが失敗する方法と理由をテストするために、さらにいくつかのテストを行いました。各テストは、すべてをクリーンにするために実行されます(de / glaucheはマシンとネクサスの両方から削除されます)
- mvnはmaven2.2.1でデプロイします:
マシンAのローカルリポジトリには、snapshot.jar + snapshot-timestamp.jarが含まれています
しかし、ネクサスにはタイムスタンプ付きのjarが1つだけあり、メタデータは次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>de.glauche</groupId>
<artifactId>a</artifactId>
<version>0.0.1-SNAPSHOT</version>
<versioning>
<snapshot>
<timestamp>20101206.200039</timestamp>
<buildNumber>1</buildNumber>
</snapshot>
<lastUpdated>20101206200039</lastUpdated>
</versioning>
</metadata>
- m2eclipse(埋め込みm3 final)で(マシンBで)更新依存関係を実行します->ローカルリポジトリにはsnapshot.jar + snapshot-timestamp.jarがあります:(
- 外部Maven2.2.1でパッケージゴールを実行します->ローカルリポジトリにはsnapshot.jar + snapshot-timestamp.jarがあります:(
OK、次にmaven 3.0.1で試してください(プロジェクトaの痕跡をすべて削除した後)
マシンAのローカルリポジトリの方が見栄えが良く、タイムスタンプのないjarファイルが1つだけです。
ネクサス内のタイムスタンプ付きのjarは1つだけで、メタデータは次のようになります。
de.glauche a0.0.1-スナップショット
<snapshot> <timestamp>20101206.201808</timestamp> <buildNumber>3</buildNumber> </snapshot> <lastUpdated>20101206201808</lastUpdated> <snapshotVersions> <snapshotVersion> <extension>jar</extension> <value>0.0.1-20101206.201808-3</value> <updated>20101206201808</updated> </snapshotVersion> <snapshotVersion> <extension>pom</extension> <value>0.0.1-20101206.201808-3</value> <updated>20101206201808</updated> </snapshotVersion> </snapshotVersions>
m2eclipse(埋め込みm3 final)で(マシンBで)更新依存関係を実行します->ローカルリポジトリにはsnapshot.jar + snapshot-timestamp.jarがあります:(
外部Maven2.2.1でパッケージゴールを実行します->ローカルリポジトリにはsnapshot.jar + snapshot-timestamp.jarがあります:(
したがって、要約すると、maven3の「デプロイ」目標は2.2.1よりもうまく機能し、作成マシンのローカルリポジトリは正常に見えます。しかし、レシーバーは常に多くのタイムステイドバージョンで終わります...
私は何が間違っていますか?
アップデート3
また、他のさまざまな構成もテストしました。最初に、ネクサスをアーティファクト->同じ動作に置き換えました。次に、linux maven 3クライアントを使用して、リポジトリマネージャーからスナップショットをダウンロードします->ローカルリポジトリにはまだタイムスタンプ付きのスナップショットがあります:(