Maven'e bağımlılığın en son sürümünü kullanmasını nasıl söyleyebilirim?


788

Maven'de bağımlılıklar genellikle şu şekilde ayarlanır:

<dependency>
  <groupId>wonderful-inc</groupId>
  <artifactId>dream-library</artifactId>
  <version>1.2.3</version>
</dependency>

Şimdi, sık sürümleri olan kütüphanelerle çalışıyorsanız, <version> etiketini sürekli güncellemek biraz can sıkıcı olabilir. Maven'e her zaman kullanılabilir en son sürümü (depodan) kullanmasını söylemenin bir yolu var mı?


@Martin xyz-SNAPSHOT konvansiyonunun farkındayım, ancak son sürümlerde depoya yayınlanan kütüphaneleri düşünüyordum (yani dream-library-1.2.3.jar'dan dream-library-1.2.4.jar'a gidiyor) , ve bunun gibi).
Anders Sandvig

176
Bu uygulamayı (veya sürüm aralıklarını kullanarak) yeniden üretilebilirlik için tavsiye etmiyorum. Bilinmeyen bir nedenden dolayı aniden başarısız olmaya başlayan bir yapı, sürüm numarasını el ile güncellemekten çok daha can sıkıcıdır.
Pascal Thivent

12
@PascalThivent Sürekli sürümler yapıyorsanız, bir pom'daki sürüm numarasını manuel olarak güncellemek acı vericidir. Ben bu geçmiş olsun scm eklentisi ile birlikte sürümleri eklentisi kullanın (cevabımı bakın).
Adam Gent

4
@PascalThivent Her ikisi de can sıkıcı, ama farklı bir şekilde. Her ikisi de durumuma bağlı olan ve birini kullanmak zorunda kalmamak arasında seçim yapmak istiyorum çünkü biri daha iyi olduğuna karar verdi.
Piegames

Yanıtlar:


745

NOT:

Bu cevap sadece Maven 2 için geçerlidir! Bahsedilen LATESTve RELEASEmetaversiyonlar 6 yıl önce Maven 3'te "yeniden üretilebilir yapılar uğruna" atıldı . Lütfen bu Maven 3 uyumlu çözüme bakın .


Her zaman en yeni sürümü kullanmak istiyorsanız, Maven'in sürüm aralıklarına alternatif olarak kullanabileceğiniz iki anahtar kelime vardır. Artık kullandığınız eklentileri / bağımlılıkları denetlemediğiniz için bu seçenekleri dikkatli kullanmalısınız.

Bir eklentiye veya bağımlılığa bağlı olduğunuzda, LATEST veya RELEASE sürüm değerini kullanabilirsiniz. LATEST, belirli bir havuzda en son dağıtılan eser olan en son yayınlanan veya anlık görüntü sürümünü ifade eder. RELEASE, depodaki anlık görüntü olmayan son sürümü ifade eder. Genel olarak, bir yapının spesifik olmayan bir sürümüne bağlı olan yazılım tasarlamak için en iyi uygulama değildir. Yazılım geliştiriyorsanız, bir üçüncü taraf kütüphanesinin yeni bir sürümü yayınlandığında sürüm numaralarını güncellemeniz gerekmemesi için RELEASE veya LATEST işlevini kullanmak isteyebilirsiniz. Yazılımı serbest bıraktığınızda, yapınızın veya projenizin kontrolünüz altında olmayan bir yazılım sürümünden etkilenme olasılığını azaltmak için projenizin her zaman belirli sürümlere bağlı olduğundan emin olmalısınız.

Daha fazla bilgi için Maven kitabının POM Sözdizimi bölümüne bakın. Veya Bağımlılık Sürüm Aralıkları hakkındaki şu dokümana bakın :

  • Köşeli ayraç ( [& ]) "kapalı" (dahil) anlamına gelir.
  • Parantez ( (& )) "açık" (özel) anlamına gelir.

Çeşitli seçenekleri gösteren bir örnek. Maven deposunda, com.foo:my-foo aşağıdaki meta verilere sahiptir:

<?xml version="1.0" encoding="UTF-8"?><metadata>
  <groupId>com.foo</groupId>
  <artifactId>my-foo</artifactId>
  <version>2.0.0</version>
  <versioning>
    <release>1.1.1</release>
    <versions>
      <version>1.0</version>
      <version>1.0.1</version>
      <version>1.1</version>
      <version>1.1.1</version>
      <version>2.0.0</version>
    </versions>
    <lastUpdated>20090722140000</lastUpdated>
  </versioning>
</metadata>

Bu artefakta bağımlılık gerekiyorsa, aşağıdaki seçenekleriniz vardır (diğer sürüm aralıkları elbette belirtilebilir, sadece ilgili olanları burada gösterebilir):

Tam bir sürüm bildirin (her zaman 1.0.1 olarak çözülecektir):

<version>[1.0.1]</version>

Açık bir sürüm bildirin (Maven eşleşen bir sürümü seçtiğinde, bir çarpışma meydana gelmedikçe her zaman 1.0.1 olarak çözülür):

<version>1.0.1</version>

Tüm 1.x için bir sürüm aralığı bildirin (şu anda 1.1.1 olarak çözülecektir):

<version>[1.0.0,2.0.0)</version>

Açık uçlu bir sürüm aralığı bildirin (2.0.0'a kadar çözülecektir):

<version>[1.0.0,)</version>

Sürümü LATEST olarak bildirin (2.0.0 olarak çözülecektir) (maven 3.x sürümünden kaldırılmıştır)

<version>LATEST</version>

Sürümü RELEASE olarak bildir (1.1.1 olarak çözülecek) (maven 3.x sürümünden kaldırıldı):

<version>RELEASE</version>

Varsayılan olarak kendi dağıtımlarınızın Maven meta verilerindeki "en son" girişi güncelleyeceğini, ancak "serbest bırakma" girişini güncellemek için Maven süper POM'sinden "serbest bırakma profilini" etkinleştirmeniz gerektiğini unutmayın . Bunu "-Prelease-profile" veya "-DperformRelease = true" ile yapabilirsiniz.


Maven'in bağımlılık sürümlerini (LATEST, RELEASE ve sürüm aralıkları) seçmesine izin veren herhangi bir yaklaşımın, daha sonraki sürümlerin farklı davranışları olabileceğinden (örneğin bağımlılık eklentisi daha önce bir varsayılanı değiştirdiğinden) zaman sorunları oluşturmak için sizi açık bırakabileceğini vurgulamakta fayda var. değer doğrudan yanlışa, kafa karıştırıcı sonuçlarla).

Bu nedenle, sürümlerde tam sürümleri tanımlamak genellikle iyi bir fikirdir. As Tim'in cevabı işaret, maven-versiyonları-eklentisi bağımlılık sürümlerini özellikle güncellemek için kullanışlı bir araçtır kullanım-son-versiyonlarını: sürümler ve sürümleri: kullanım-son-bültenleri hedefleri.


76
Merhaba Rich! Görünüşe göre RELEASE ve LATEST sürüm işaretleri Maven 3.x'te artık desteklenmiyor .
Pascal Thivent

16
Belgeyi doğru
Mond Raymond

9
@RichSeller hey Zengin; Bunun Maven 3.0'da artık mevcut olmadığını anlamaya başlamadan önce biraz zaman geçirdim;) Maven 3.0 depreaction'ı belirten bir güncelleme ile başlayacak şekilde cevabı düzenlemeyi düşünür müsünüz? Çok teşekkürler!
Miquel

6
İyi bir dengenin ana sürümü kilitlemek ama en son küçük (veya yama) sürümünü almak için hangisi olduğuna inanıyorum (hangisi sadece bağlı olduğunuz artifatta hata düzeltmeleri için kullanılırsa). Mevcut sözdizimi ile bu sadece şöyle bir aralıkta mümkün görünmektedir (not: parantez ile başlar ve parenler ile biter):[1.1,2.0)
Amr Mostafa

2
FWIW ... Maven3 Uyumluluk Notlarına bağlantı güncellendi: cwiki.apache.org/confluence/display/MAVEN/…
dyodji

384

Şimdi bu konunun eski olduğunu biliyorum, ancak soruyu ve OP tarafından verilen cevabı okurken Maven Versions Eklentisi aslında sorusuna daha iyi bir cevap olabilir gibi görünüyor :

Özellikle aşağıdaki hedefler kullanılabilir:

  • sürümler: use-latest-sürümler pom'u daha yeni bir sürüm olan tüm sürümleri arar ve en son sürümle değiştirir.
  • sürümleri: use-latest- release'ler, yeni bir sürüm olan tüm SNAPSHOT olmayan sürümleri için pom'da arama yapar ve bunları en son sürümle değiştirir.
  • version : update-properties Bir projede tanımlanan özellikleri, belirli bağımlılıkların kullanılabilir en son sürümüne karşılık gelecek şekilde güncelleştirir. Bir bağımlılık paketinin tek bir sürüme kilitlenmesi gerekiyorsa bu yararlı olabilir.

Aşağıdaki diğer hedefler de sağlanmıştır:

  • sürümler: display-bağımlılık güncellemeleri bir projenin bağımlılıklarını tarar ve daha yeni sürümleri olan bu bağımlılıkların raporunu oluşturur.
  • sürümler: display-plugin-updates bir projenin eklentilerini tarar ve daha yeni sürümleri olan eklentilerin raporunu oluşturur.
  • version : update-parent , bir projenin üst bölümünü mevcut en yeni sürüme başvuruda bulunacak şekilde günceller. Örneğin, bir şirket kökü POM'u kullanıyorsanız, şirket kökü POM'unun en son sürümünü kullandığınızdan emin olmanız gerekiyorsa bu hedef size yardımcı olabilir.
  • version : update-child-modules , bir projenin alt modüllerinin üst bölümünü günceller, böylece sürüm geçerli projenin sürümüyle eşleşir. Örneğin, topladığı projelerin de üst öğesi olan bir toplayıcı pom'unuz varsa ve çocuklar ve ebeveyn sürümleri senkronize değilse, bu mojo alt modüllerin sürümlerini düzeltmeye yardımcı olabilir. (Projeniz, sürüm yanlış eşleşmesi nedeniyle oluşturulamayacak kadar bozuksa, bu hedefi çalıştırmak için Maven'i -N seçeneğiyle çağırmanız gerekebilir).
  • sürümleri: kilitli anlık görüntüler pom'da tüm -SNAPSHOT sürümlerini arar ve bunları -SNAPSHOT'un geçerli zaman damgası sürümüyle değiştirir, örneğin -20090327.172306-4
  • version : unlock-snapshots pom'da tüm zaman damgası kilitli anlık görüntü sürümlerini arar ve bunları -SNAPSHOT ile değiştirir.
  • version : resol-ranges , sürüm aralıklarını kullanarak bağımlılıkları bulur ve aralığı kullanılan belirli sürüme çözümler.
  • version : use-release , pom'u, piyasaya sürülen tüm -SNAPSHOT sürümleri için arar ve bunları ilgili sürümle değiştirir.
  • version : use-next-release sürümleri, yeni bir sürüm olan tüm SNAPSHOT olmayan sürümleri için pom'da arama yapar ve bunları bir sonraki sürümle değiştirir.
  • version : use-next- version sürümleri pom'da daha yeni bir sürüm olan tüm sürümleri arar ve bunları sonraki sürümle değiştirir.
  • version : commit , pom.xml.versionsBackup dosyalarını kaldırır. Yerleşik "Poor Man's SCM" nin yarısını oluşturur.
  • version : revert, pom.xml dosyalarını pom.xml.versionsBackup dosyalarından geri yükler. Yerleşik "Poor Man's SCM" nin yarısını oluşturur.

Gelecekte referans olması için ekleyeceğimi düşündüm.


10
Bu bağlamda, "sürüm" ve "sürüm" arasındaki fark nedir?
Ben Noland

1
@BenNoland, bu durumda farkın sonraki sürümün bir yayın artefaktı olması gerekmeyeceğine inanıyorum. Örneğin, 1.0.0-SNAPSHOT, 1.0.0 ve 1.0.1-SNAPSHOT sürümlü bir eser ve 1.0.0-SNAPSHOT, sürümlerine bir pom referansı verildi: sonraki sürümler ve sürümler: sonraki sürümler 1.0.0'a çözülecek , sürümler: en son sürümler ve sürümler: en son sürümler 1.0.1-SNAPSHOT ve 1.0.0'a sırayla çözümlenecektir.
Ryan Beesley

1
Bu çok güzel tabloda sürümler / sürümler / anlık görüntüler arasındaki bazı belirsizlikleri buradan çözebilirsiniz: goo.gl/iDq6PK
Ev0oD

1
Tüm olası ve alakasız hedefleri yazdırmak yardımcı olmaz.
MariuszS

2
Ben sürümleri düşünürdüm: en son sürümleri kullanmak OP sorunlarının çoğunu çözer.
Alex R

172

Lütfen bu sayfaya bir göz atın ("Bağımlılık Sürümü Aralıkları" bölümü). Yapmak isteyebileceğiniz şey,

<version>[1.2.3,)</version>

Bu sürüm aralıkları Maven2'de uygulanır.


Bazı nedenlerden dolayı bu seçenek benim için işe yaramadı, aralık içinde bir sürüm seçti, ancak en yeni sürümü seçmedi.
sorin

4
Maven'in sürüm numaralarını nasıl karşılaştırdığına daha yakından bakmak isteyebilirsiniz - katı bir desene uymazsanız Maven, dize olarak değil sayı olarak karşılaştırır.
Thorbjørn Ravn Andersen

Bu sayfa Codehaus'ta bulunuyor ve kendisini "Maven 2.0 için henüz uygulanmamış şeyler" olarak tanımlıyor ... Maven dokümantasyonunun kendisi sürüm aralıkları hakkında hiçbir şey söylemiyor. Bir şey mi kaçırıyorum? Sürüm aralıkları ne zaman piyasaya sürüldü? Resmi belgelerde nerede tarif ediliyorlar?
Shannon

1
Yanılıyorsunuz, sürüm aralığı tüm sürümlerin 1.2.3'ten daha yüksek olduğu anlamına gelir. Bu en son sürüm değil.
MariuszS

@sorin Projenizde söz konusu esere de bağlı olan başka bağımlılıklarınız oldu mu? Bunu mvn dependency:tree -Dverboseanlamaya çalışın . Bu beklenmeyen versiyonu açıklayabilir.
Eugene Beresovsky

83

Diğerlerinden farklı olarak, her zaman en son sürümü istemenizin birçok nedeni olduğunu düşünüyorum . Özellikle sürekli dağıtım yapıyorsanız (bazen günde 5 sürümümüz var) ve çok modüllü bir proje yapmak istemiyorsanız.

Yaptığım şey Hudson / Jenkins'in her yapım için şunları yapmasını sağlamak:

mvn clean versions:use-latest-versions scm:checkin deploy -Dmessage="update versions" -DperformRelease=true

Ben bağımlılıkları güncellemek ve sonra kaynak kontrol etmek için sürümleri eklentisi ve scm eklentisi kullanmak olduğunu. Evet CI'mın SCM checkin'lerini yapmasına izin veriyorum (maven yayın eklentisi için yine de yapmanız gerekiyor).

Sürümler eklentisini yalnızca istediğinizi güncellemek için ayarlamak istersiniz:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>versions-maven-plugin</artifactId>
    <version>1.2</version>
    <configuration>
        <includesList>com.snaphop</includesList>
        <generateBackupPoms>false</generateBackupPoms>
        <allowSnapshots>true</allowSnapshots>
    </configuration>
</plugin>

-SNAPSHOT ile ilgilenen ve -SNAPSHOT'un (önemli olan) bir sürümünün olduğunu doğrulayan sürümü yapmak için sürüm eklentisini kullanıyorum.

Yaptığım şeyi yaparsanız, tüm anlık görüntü yapıları için en son sürümü ve sürüm yapıları için en son sürümü alacaksınız. Yapılarınız da tekrar üretilebilir.

Güncelleme

Bu iş akışının bazı özelliklerini soran bazı yorumlar fark ettim. Artık bu yöntemi kullanmadığımızı söyleyeceğim ve maven sürümleri eklentisinin buggy ve genel olarak doğal olarak kusurlu olmasının en büyük nedeni.

Kusurludur, çünkü versiyonları ayarlamak için versiyon eklentisini çalıştırmak için pom'un doğru çalışması için mevcut tüm versiyonların olması gerekir. Bu sürümler eklentisi pom'da başvurulan sürümü bulamazsa hiçbir şeyin en son sürümüne güncellenemez. Disk alanı nedenleriyle eski sürümleri sık sık temizlediğimiz için bu aslında oldukça can sıkıcı bir durum.

Gerçekten sürümleri ayarlamak için maven'den ayrı bir araca ihtiyacınız var (bu yüzden doğru çalışması için pom dosyasına bağlı değilsiniz). Bash gibi alçak dilde böyle bir araç yazdım. Betik, sürüm eklentisi gibi sürümleri güncelleyecek ve pompayı kaynak kontrolüne geri kontrol edecektir. Ayrıca mvn sürümleri eklentisinden 100 kat daha hızlı çalışır. Ne yazık ki kamu kullanımı için bir şekilde yazılmamıştır, ancak insanlar ilgilenirse bunu yapabilir ve bir gist veya github'a koyabilirim.

Bazı yorumlar bizim yaptığımızın bu olduğunu sorduğu için iş akışına geri dönmek:

  1. Kendi depolarında kendi jenkins işleriyle 20 kadar projemiz var
  2. Serbest bıraktığımızda maven serbest bırakma eklentisi kullanılır. Bunun iş akışı eklentinin belgelerinde yer almaktadır. Maaven serbest bırakma eklentisi berbat (ve ben nazikim) ama işe yarıyor. Bir gün bu yöntemi daha uygun bir şeyle değiştirmeyi planlıyoruz.
  3. Projelerden biri serbest bırakıldığında jenkins özel bir iş çalıştırdığında, tüm sürümleri güncelle işini çağırırız (jenkins'in bir sürümünün kısmen karmaşık bir yol olduğunu nasıl bildiklerinden, maven jenkins yayın eklentisi de oldukça berbattır).
  4. Güncelleme tüm sürümleri işi 20 proje hakkında bilir. Aslında, modüller bölümündeki tüm projelere bağımlılık sırasına göre spesifik olmak bir toplayıcı pom. Jenkins, tüm projeleri güncellemeleri en son sürümlere çekecek ve daha sonra pomları kontrol edecek (yine modüller bölümüne göre bağımlılık sırasına göre yapılır) sihirli groovy / bash foo'yu çalıştırıyor.
  5. Her proje için pom değiştiyse (bazı bağımlılıktaki bir sürüm değişikliği nedeniyle) teslim edilir ve hemen o projeye karşılık gelen işi çalıştırmak için jenkinlere ping atıyoruz (aksi takdirde merhamet halindeyseniz inşa bağımlılığı sırasını korumaktır) SCM Anket zamanlayıcı).

Bu noktada, sürümün ve otomatik sürümün genel yapınızdan ayrı bir araç olması yine de iyi bir şey.

Şimdi, yukarıda listelenen sorunlar nedeniyle maven'ın bir çeşit berbat olduğunu düşünebilirsiniz, ancak bu, genişletilebilir sözdizimini (aka XML) ayrıştırması kolay bir bildirimi olmayan bir oluşturma aracıyla aslında oldukça zor olacaktır .

Aslında bash / groovy komut dosyalarının ipuçlarına yardımcı olmak için ad alanları aracılığıyla özel XML nitelikleri ekliyoruz (örneğin, bu sürümü güncellemeyin).


5
Cevabınıza bir motivasyon (sürekli dağıtım) eklediğiniz için teşekkür ederiz.
David J. Liszewski

10
Bence burada önemli olan yapıların bu yöntemle yeniden üretilebilir olması, oysa sürüm aralıkları veya -LATEST kullanırken değil!
marc.guenther

Derlemeyi çalıştırmadan önce pom projesinde değişiklik yapan harici bir araç kullanarak çözümü ikinci olarak kullanmak istiyorum. Bu yaklaşımı, sürüm aralığı eklentisi, örneğin yalnızca sürümleri değil hesap tarihlerini dikkate alarak doğal olarak hata aldığı için de kullanıyoruz.
Daniel Hajduk

37

Bağımlılık sözdizimi Bağımlılık Sürümü Gereksinim Belirtimi belgelerinde bulunur. İşte tamlık içindir:

Bağımlılıklar versionöğesi, etkili bağımlılık sürümünü hesaplamak için kullanılan sürüm gereksinimlerini tanımlar. Sürüm gereksinimleri aşağıdaki sözdizimine sahiptir:

  • 1.0: 1.0'da "Yumuşak" gereksinimi (yalnızca bağımlılık için diğer tüm aralıklarla eşleşiyorsa bir öneri)
  • [1.0]: 1.0'da "Zor" gereksinimi
  • (,1.0]: x <= 1,0
  • [1.2,1.3]: 1.2 <= x <= 1.3
  • [1.0,2.0): 1.0 <= x <2.0
  • [1.5,): x> = 1,5
  • (,1.0],[1.2,): x <= 1.0 veya x> = 1.2; birden çok küme virgülle ayrılır
  • (,1.1),(1.1,): 1.1 hariç tutulur (örneğin, bu kütüphane ile birlikte çalışmadığı biliniyorsa)

Sizin durumunuzda, <version>[1.2.3,)</version>


15

Muhtemelen geliştirme sırasında çok fazla değişen geliştirme sürümlerine bağlı mısınız?

Geliştirme sürümlerinin sürümünü artırmak yerine, gerektiğinde üzerine yazdığınız bir anlık görüntü sürümünü kullanabilirsiniz; bu, her küçük değişiklikteki sürüm etiketini değiştirmek zorunda kalmayacağınız anlamına gelir. 1.0-SNAPSHOT gibi bir şey ...

Ama belki başka bir şey elde etmeye çalışıyorsunuz;)


7

En son kim kullanıyorsa, lütfen -U'ya sahip olduğunuzdan emin olun, aksi takdirde en son anlık görüntü çekilmez.

mvn -U dependency:copy -Dartifact=com.foo:my-foo:LATEST
// pull the latest snapshot for my-foo from all repositories

-UI kullanıyorum bileCouldn't download artifact: Failed to resolve version for com.app:common:jar:LATEST
Robert

7

Bu soru ortaya çıktığında, maven'de sürüm aralıkları olan bazı karışıklıklar vardı, ancak bunlar maven'in yeni sürümlerinde çözüldü. Bu makale, maven'in sürümleri nasıl anladığını daha iyi anlamak için sürüm aralığının nasıl çalıştığını ve en iyi uygulamaları ele almaktadır: https://docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm#MAVEN8855


2
Bu teorik olarak soruyu cevaplayabilirken, cevabın temel bölümlerini buraya dahil etmek ve referans için bağlantı sağlamak tercih edilir.
Karl Richter

6

Gerçek 3.x'te bile hala çalışıyor, şaşırtıcı bir şekilde projeler inşa ediyor ve dağıtıyor. Ancak her yerde m2e ve tutulmada sorunlara neden olan LATEST / RELEASE anahtar sözcüğü, ALSO projeleri LATEST / RELEASE aracılığıyla dağıtılan bağımlılığa bağlıdır sürümü tanıyamaz.

Sürümü özellik olarak tanımlamaya çalışırsanız ve başka bir yere başvurursanız da soruna neden olur.

Sonuç olarak, eğer yapabilirsen -maven-plugin versiyonunu kullanıyoruz .


5

Bazen sürüm aralıklarını kullanmak istemezsiniz, çünkü bağımlılıklarınızı çözmek için "yavaş" gibi görünüyorlar, özellikle de sürekli teslimat olduğunda ve tonlarca sürüm olduğunda - özellikle ağır geliştirme sırasında.

Çözümlerden biri sürüm-maven-eklentisini kullanmak olacaktır . Örneğin, bir mülk bildirebilirsiniz:

<properties>
    <myname.version>1.1.1</myname.version>
</properties>

ve versiyonlar-maven-eklentisini pom dosyanıza ekleyin:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>versions-maven-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <properties>
                    <property>
                        <name>myname.version</name>
                        <dependencies>
                            <dependency>
                                <groupId>group-id</groupId>
                                <artifactId>artifact-id</artifactId>
                                <version>latest</version>
                            </dependency>
                        </dependencies>
                    </property>
                </properties>
            </configuration>
        </plugin>
    </plugins>
</build>

Ardından, bağımlılığı güncellemek için hedefleri yürütmeniz gerekir:

mvn versions:update-properties validate

1.1.1'den daha yeni bir sürüm varsa, size şunu söyleyecektir:

[INFO] Updated ${myname.version} from 1.1.1 to 1.3.2

3

Maven'in bir bağımlılık en son sürümünü kullanmalısınız istiyorsanız, o zaman kullanabilirsiniz Sürümleri Maven eklentisi nasıl bu eklenti kullanmak ve Tim zaten iyi bir cevap vermiş, onun izleyin cevabı .

Ancak bir geliştirici olarak bu tür uygulamaları tavsiye etmeyeceğim. NEDEN?

sorunun yorumunda Pascal Thivent tarafından neden zaten verildiğine cevap

Bu uygulamayı (veya sürüm aralıklarını kullanarak) yeniden üretilebilirlik için tavsiye etmiyorum. Bilinmeyen bir nedenden dolayı aniden başarısız olmaya başlayan bir yapı, sürüm numarasını el ile güncellemekten çok daha can sıkıcıdır.

Bu tür uygulamaları tavsiye edeceğim:

<properties>
    <spring.version>3.1.2.RELEASE</spring.version>
</properties>

<dependencies>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>

</dependencies>

bakımı ve hata ayıklaması kolaydır. POM'nizi hemen güncelleyebilirsiniz.


version-maven-plugin kullanıyorsanız, derleme yine de yeniden oluşturulabilir. Maaven versiyonunun güncellenmesi ayrı bir taahhütte yapılabilir (cevabımdan da görebileceğiniz gibi, ayrı bir hedef belirtmelisiniz, sadece yapıda sihirli bir şekilde gerçekleşmez).
Markon

1

Maven 3.5.4 benim çözüm, tutulması nexus kullanın:

<dependency>
    <groupId>yilin.sheng</groupId>
    <artifactId>webspherecore</artifactId>
    <version>LATEST</version> 
</dependency>

sonra tutulmada: atl + F5veforce update of snapshots/release

benim için çalışıyor.


Yukarıda çeşitli yazılarda ably belirtilen nedenlerle komut satırında çalışmayacak. Birçoğumuz otomatik yapılara uymak zorundayız ve bu nedenle POM'larımız sadece Eclipse'de değil, komut satırında çalıştırıldığında çalışmak zorundayız.
bigbadmouse

Ben 3.5.4 maven kullanıyorum ve 'en son' kullanırken bunu aldım: SON veya TAHLİYE (her ikisi de kullanımdan kaldırılıyor) @ satır 154, sütun 13
Leonardo Leonardo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.