Şimdi maven-3 yaptığını damla desteği <uniqueVersion> false için </ uniqueVersion> anlık eserler için gerçekten timestamped anlık görüntülerini kullanmak gerekir gibi görünüyor. Özellikle maven 3'ü dahili olarak kullanan m2eclipse bundan etkilenmiş gibi görünüyor, SNAPSHOTS benzersiz olmadığında güncelleme-anlık görüntüleri çalışmıyor.
Tüm anlık görüntüleri uniqueVersion = false olarak ayarlamak daha önce en iyi uygulama gibi görünüyordu
Şimdi, zaman damgalı sürüme geçmek büyük bir sorun gibi görünmüyor, sonuçta bunlar, eski anlık görüntüleri düzenli aralıklarla silebilen merkezi bir bağlantı noktası deposu tarafından yönetiliyor.
Sorun yerel geliştirici iş istasyonlarında. Yerel depoları , benzersiz anlık görüntülerle hızla çok büyüyor .
Bu problemle nasıl başa çıkılır?
Şu anda aşağıdaki olası çözümleri görüyorum:
- Geliştiricilerden depoyu düzenli aralıklarla temizlemelerini isteyin (bu, silinmesi uzun ve gerekli olan her şeyi indirmek daha da uzun sürdüğü için çok fazla sıkıntıya yol açar)
- Yerel depodaki tüm SNAPSHOT dizinlerini silen ve geliştiricilerden bu komut dosyasını zaman zaman çalıştırmalarını isteyen bir komut dosyası oluşturun (ilkinden daha iyidir, ancak mevcut anlık görüntüleri çalıştırmak ve indirmek hala biraz zaman alır)
- bağımlılığı kullanın: purge-local-repository plugin (Eclipse'den çalıştırıldığında, açık dosyalar nedeniyle sorun yaşıyor, her projeden çalıştırılması gerekiyor)
- Her iş istasyonunda bağlantı noktası kurun ve eski anlık görüntüleri temizlemek için bir iş ayarlayın (en iyi sonuç, ancak 50'den fazla bağlantı noktası sunucusunu korumak istemiyorum, ayrıca geliştirici iş istasyonlarında bellek her zaman kısıtlıdır)
- SNAPSHOTS kullanmayı tamamen bırak
Yerel deponuzun sabit disk alanınızı doldurmasını önlemenin en iyi yolu nedir?
Güncelleme:
Davranışı doğrulamak ve daha fazla bilgi vermek için küçük bir bağlantı noktası sunucusu kuruyorum, iki proje (a ve b) oluşturup şunu deneyin:
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>
Şimdi, maven'i kullandığımda ve "a" üzerinde "konuşlandır" ı çalıştırdığımda,
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
yerel depoda. Dağıtım hedefini her çalıştırdığımda yeni bir zaman damgası sürümü ile. Aynı durum, Anlık Görüntüleri nexus sunucusundan güncellemeye çalıştığımda da oluyor ("a" Projesini kapatın, yerel depodan silin, "b" oluşturun)
Çok sayıda anlık görüntünün oluşturulduğu bir ortamda (hudson sunucusunu düşünün ...), yerel depo eski sürümlerle hızla dolar
Güncelleme 2:
Bunun nasıl ve neden başarısız olduğunu test etmek için birkaç test daha yaptım. Her test temiz her şeye karşı çalıştırılır (de / glauche hem makinelerden hem de bağlantı noktasından silinir)
- mvn 2.2.1 ile mvn dağıtımı:
A makinesindeki yerel depo, snapshot.jar + snapshot-timestamp.jar içeriyor
AMA: bağlantı noktasında yalnızca bir zaman damgalı jar, meta veriler şunları okur:
<?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'de güncelleme bağımlılıklarını (makine B'de) çalıştır (katıştırılmış m3 final) -> yerel depoda snapshot.jar + snapshot-timestamp.jar :(
- harici maven 2.2.1 ile paket hedefini çalıştırın -> yerel depoda snapshot.jar + snapshot-timestamp.jar :(
Tamam, sonra maven 3.0.1 ile deneyin (a projesinin tüm izlerini kaldırdıktan sonra)
A makinesindeki yerel depo daha iyi görünüyor, yalnızca bir zaman damgalı olmayan jar
bağlantı noktasında yalnızca bir zaman damgalı jar, meta veriler şunları okur:
de.glauche a 0.0.1-SNAPSHOT
<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'de güncelleme bağımlılıklarını (makine B'de) çalıştır (katıştırılmış m3 final) -> yerel depoda snapshot.jar + snapshot-timestamp.jar :(
harici maven 2.2.1 ile paket hedefini çalıştırın -> yerel depoda snapshot.jar + snapshot-timestamp.jar :(
Özetlemek gerekirse: maven3'teki "konuşlandırma" hedefi 2.2.1'den daha iyi çalışıyor, oluşturma makinesindeki yerel depo iyi görünüyor. Ancak, alıcı her zaman birçok zaman damgalı sürümle sonuçlanır ...
Neyi yanlış yapıyorum ?
Güncelleme 3
Ayrıca çeşitli diğer konfigürasyonları da test ettim, önce nexus'u yapay -> aynı davranışla değiştirdim. Ardından anlık görüntüleri havuz yöneticisinden indirmek için linux maven 3 istemcilerini kullanın -> yerel depoda hala zaman damgalı anlık görüntüler var :(