Yanıtlar:
Maven'deki anlık görüntü sürümü, yayınlanmamış bir sürümdür.
Fikir şu ki, bir sürüm (veya başka bir sürüm) yapılmadan önce bir 1.0
var 1.0-SNAPSHOT
. Bu sürüm ne olabilir 1.0
. Temel olarak " 1.0
geliştirme aşamasında". Bu gerçek bir sürüme yakın olabilir 1.0
veya oldukça uzak olabilir ( 0.9
örneğin sürümden hemen sonra ).
"Gerçek" sürüm ile anlık görüntü sürümü arasındaki fark, anlık görüntülerin güncelleme alabilmesidir. Bu, 1.0-SNAPSHOT
bugün indirmenin, dün veya yarın indirmekten farklı bir dosya verebileceği anlamına gelir .
Genellikle, anlık görüntü bağımlılıkları yalnızca geliştirme sırasında bulunmalıdır ve yayımlanan sürümlerin (yani anlık görüntü olmayanların) anlık görüntü sürümüne bağımlılığı olmamalıdır.
1.0-DEVELOPMENT
" ya da " 1.0-INPROGRESS
" olarak adlandırmıyorlar? Neden insanlar belli olmayan terimler kullanmak zorunda?
Diğer üç cevap size bir -SNAPSHOT
sürümün ne olduğu konusunda iyi bir görüş sağlar . Ben sadece Maven bir davranış bulduğu zaman davranışları hakkında bazı bilgiler eklemek istedim.SNAPSHOT
bağımlılık .
Bir uygulama oluşturduğunuzda Maven, yerel depodaki bağımlılıkları arar . Orada kararlı bir sürüm bulunmazsa, bu bağımlılığı almak için uzak depolarda ( settings.xml
veya içinde tanımlanmış pom.xml
) arama yapar. Ardından, sonraki derlemeler için kullanılabilir hale getirmek için yerel depoya kopyalar.
Örneğin, bir foo-1.0.jar
kütüphane kararlı bir sürüm olarak kabul edilir ve Maven yerel depoda bulursa, bunu mevcut derleme için kullanır.
Şimdi, bir foo-1.0-SNAPSHOT.jar
kütüphaneye ihtiyacınız varsa , Maven bu sürümün kararlı olmadığını ve değişikliklere tabi olduğunu bilecektir. Bu nedenle Maven, yerel kütüphanede bu kütüphanenin bir sürümü bulunsa bile, uzak depolarda daha yeni bir sürüm bulmaya çalışacaktır. Ancak, bu kontrol günde sadece bir kez yapılır. Bunun anlamı varsa bir o foo-1.0-20110506.110000-1.jar
tekrar aynı gün Maven yapı çalıştırırsanız yerel depoda (yani bu kütüphane 11:00:00 de 2011/05/06 oluşturulduğunu tespit etti) ve, Maven'in olacak değil depoları kontrol daha yeni bir sürüm için.
Maven, depo tanımınızda bu güncelleme politikasını değiştirmenin bir yolunu sunar:
<repository>
<id>foo-repository</id>
<url>...</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>XXX</updatePolicy>
</snapshots>
</repository>
nerede XXX
olabilir:
SNAPSHOT
sürüm kararlı kütüphaneler olarak ele alınacaktır.(settings.xml modelini burada bulabilirsiniz)
SNAPSHOT
sürümleri: mvn clean package -U
olarak başına maven öğretici
mvn install
benim yerel repo içine sürüm 1.0-SNAPSHOT bir kavanoz yükleyin. Ertesi gün projede değişiklikler yaptım ama sürümü değiştirmedim - o zaman çalıştırırken mvn install
yerel repoda değişmedi. Bu beklenen davranış mı? Bir sürümü yeniden kullanamaz ve üzerinde mvn install
değişiklik yaptıktan sonra üzerine yazamaz mıyım?
"SNAPSHOT" terimi, derlemenin belirli bir zamanda kodunuzun bir anlık görüntüsü olduğu anlamına gelir.
Genellikle bu sürümün hala ağır bir geliştirme aşamasında olduğu anlamına gelir.
Kod hazır olduğunda ve serbest bırakılma zamanı geldiğinde, POM'da listelenen sürümü değiştirmek isteyeceksiniz. Sonra "SNAPSHOT" yerine "1.0" gibi bir etiket kullanırsınız.
Sürüm oluşturma konusunda yardım için, Sürüm oluşturma Semantik Sürüm Oluşturma spesifikasyonuna bakın .
Bir "sürüm" değişmeyen bir sürümün son derlemesidir.
"Anlık görüntü", aynı ada sahip başka bir yapı ile değiştirilebilen bir yapıdır. Bu, yapının herhangi bir zamanda değişebileceğini ve hala aktif geliştirme aşamasında olduğunu ima ediyor.
Aynı koda dayalı olarak farklı sürümler için farklı yapılarınız var. Örneğin bir hata ayıklama ve bir hata ayıklama olabilir. Biri Java 5.0 ve diğeri Java 6 için. Genel olarak ihtiyacınız olan her şeyi yapan bir yapıya sahip olmak daha kolaydır. ;)
Maven sürümleri, bir projenin şu anda aktif geliştirme aşamasında olduğunu belirtmek için bir dizgi değişmezi "SNAPSHOT" içerebilir.
Örneğin, projenizde “1.0-SNAPSHOT” sürümü varsa ve bu projenin yapılarını bir Maven deposuna dağıtırsanız, 11'de bir sürüm dağıtacak olsaydınız Maven bu sürümü “1.0-20080207-230803-1” e genişletirdi : 07 Şubat 2008 UTC. Başka bir deyişle, bir anlık görüntüyü dağıtırken, bir yazılım bileşeninin sürümünü yayınlamazsınız; belirli bir zamanda bir bileşenin anlık görüntüsünü serbest bırakıyorsunuzdur.
Bu nedenle, esasen anlık görüntü versiyonları, aktif geliştirme altındaki projeler için kullanılır. Projeniz etkin geliştirilmekte olan bir yazılım bileşenine bağlıysa, anlık görüntü sürümüne güvenebilirsiniz ve Maven, bir derleme çalıştırdığınızda düzenli olarak en son anlık görüntüyü bir depodan indirmeye çalışır. Benzer şekilde, sisteminizin bir sonraki sürümünde “1.8” sürümü olacaksa, projeniz resmi olarak piyasaya sürülene kadar “1.8-SNAPSHOT” sürümüne sahip olacaktır.
Örneğin, aşağıdaki bağımlılık her zaman baharın en son 1.8 geliştirme JAR'ını indirir:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>1.8-SNAPSHOT”</version>
</dependency>
Maaven salım sürecine bir örnek
Terminoloji hakkında bir noktaya değinmek istiyorum. Diğer cevaplar Maven bağlamında "enstantane" versiyonun ne olduğu hakkında iyi açıklamalar verdi. Ancak, anlık görüntü olmayan bir sürümün "sürüm" olarak adlandırılması gerektiği anlaşılıyor mu?
Gibi bir eleme olmayan herhangi bir sürümü olacak gibi görünüyor bir "serbest bırakma" versiyonunun anlamsal sürüm fikri arasında bazı gerginlik var -SNAPSHOT
ön eleme gibi yok da ama -beta.4
; ve Maven'in sadece yokluğunu içeren bir "sürüm" versiyonu fikri -SNAPSHOT
.
Başka bir deyişle, "sürümün" "Maven Central'a serbest bırakabileceğimiz" veya "yazılımın halka son sürümde olduğu" anlamında anlamsal bir belirsizlik vardır. -beta.4
Eğer herkese açık bırakırsak bir "sürüm" olarak düşünebiliriz , ancak bu bir "son sürüm" değildir. Semantik versiyonlama, açık -beta.4
bir şekilde "yayın öncesi" bir versiyon olduğunu açıkça belirtmektedir , bu yüzden onsuz bir "yayın" versiyonu olarak adlandırılması mantıklı olmaz -SNAPSHOT
. Aslında tanım gereği , test için halkın erişimine izin verebilmemize rağmen, gerçek bir sürüm değil -rc.5
, bir sürüm adayıdır .
Maven, buna rağmen, bence sadece niteleyici olmayan bir "sürüm" sürümünü çağırmak daha uygun görünüyor, hatta değil -beta.4
. Belki de Maven anlık görüntü olmayan sürümü için daha iyi bir isim "kararlı" bir sürümdür ( başka bir cevaptan esinlenilmiştir ). Böylece:
1.2.3-beta.4-SNAPSHOT
: Ön sürümün anlık görüntüsü.1.2.3-SNAPSHOT
: Sürüm sürümünün anlık görüntüsü.1.2.3-beta.4
: Sürüm öncesi sürümün kararlı bir sürümü.1.2.3
: Bir yayın sürümü (açık, sabit, anlık olmayan bir sürümdür).Anlık görüntü bir havuz için böyle görünür ve bu durumda etkinleştirilmez, yani burada belirtilen havuz sabittir ve güncellemeye gerek yoktur.
<project>
...
<repositories>
<repository>
<id>lds-main</id>
<name>LDS Main Repo</name>
<url>http://code.lds.org/nexus/content/groups/main-repo</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
Başka bir durum şöyle olabilir:
<snapshots>
<enabled>true</enabled>
</snapshots>
yani Maven bu depo için güncellemeler arayacaktır. Ayrıca etiketli güncellemeler için bir aralık belirleyebilirsiniz.
genellikle maven'de iki tür derleme vardır 1) Anlık görüntü derlemeleri 2) Sürüm derlemeleri
Anlık görüntü derlemeleri: SNAPSHOT, geçerli dağıtım kopyasını normal bir sürüm gibi göstermeyen özel bir sürümdür, maven, uzak havuzdaki her derlemenin sürümünü denetler, böylece anlık görüntü derlemeleri geliştirme derlemelerinden başka bir şey değildir.
Sürüm yapıları: Sürüm, sürüm için SNAPSHOT'un kaldırılması anlamına gelir; bunlar normal sürümlerdir.
Anlık görüntü, kararlı olmayan sürüm olduğu anlamına gelir.
sürüm 1.0.0 gibi bir anlık görüntü içerdiğinde -SNAPSHOT kararlı bir sürüm olmadığı anlamına gelir ve bağımlılıkları çözmek için uzak depo arayın
SDLC'nin bağlamını anlamak, enstantane ve sürüm arasındaki farkın anlaşılmasına yardımcı olacaktır. Geliştirme işlemi sırasında geliştiricilerin tümü bir temel şubeye özelliklerini katkıda bulunur. Bir noktada, kurşun yeterli özelliklerin biriktiğini düşünür ve ardından taban dalından bir serbest bırakma dalı keser. Bu zaman noktasından önceki tüm yapılar anlık görüntüdür. Bu noktaya gönderi yapan derlemeler bültenlerdir. Unutulmamalıdır ki, salım testleri, salım testi sırasında herhangi bir kusur tespit edilirse üretime gitmeden önce de değişebilir.
Anlık görüntü, yapılandırmanıza bağlı olarak Maven'in özel bir bağımlılıktaki en son değişiklikleri kontrol edeceği anlamına gelir. Anlık görüntü kararsızdır, çünkü geliştirme aşamasındadır, ancak özel bir projede en son değişikliklerin yapılması gerekiyorsa bağımlılık sürümünüzü anlık görüntü sürümüne yapılandırmanız gerekir. Bu senaryo, bu ürünlerin birbiriyle yakından ilişkili olduğu birden fazla ürüne sahip büyük kuruluşlarda meydana gelir.
Adından da anlaşılacağı gibi, anlık görüntü projenin durumunu ve o andaki bağımlılıklarını ifade eder. Maven projenin daha yeni bir SNAPSHOT'unu bulduğunda, yerel depodaki projenin eski .jar dosyasını indirir ve değiştirir.
Anlık görüntü sürümleri, aktif geliştirme altındaki projeler için kullanılır. Projeniz etkin geliştirilmekte olan bir yazılım bileşenine bağlıysa, anlık görüntü sürümüne güvenebilirsiniz ve Maven, bir derleme çalıştırdığınızda düzenli olarak en son anlık görüntüyü bir depodan indirmeye çalışır.