Gradle - bir bağımlılığın en son sürümünü edinme


94

GradleAşağıdakileri söylemenin en kolay yolu ne olabilir :

'Junit' bağımlılığını alın ve en son 'yayın' sürümünü alın.

Maven ve Ivy depolarını yönetmek benim için biraz yeni. Aşağıdaki adımları denedim ve bunlar Could not resolve dependency ...hatayla sonuçlandı :

  • compile "junit:junit:latest.release"Yalnızca olarak ayarlanmış depolarla yaz mavenCentral() (ancak "junit: junit: 4.10" dersem işe yarar).

  • compile "junit:junit:latest.release"Depo ile yaz aşağıdaki yolu ayarlayın:

    ivy {
        // I also tried 'http://maven.org' and other possible variants.           
        url "http://repo1.maven.org" 
        layout "maven"
    }
    
  • Spring Source Ivy deposunu kullanmaya çalışıldı:

    ivy {
        artifactPattern "http://repository.springsource.com/ivy/libraries/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
        ivyPattern "http://repository.springsource.com/ivy/libraries/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
    }
    

Belki bir şeyi yanlış anladım. Bağımlılığın en son sürümünü almak neden bu kadar zor bir iş olsun?


Dinamik sürüm, mevcut en son sürüm için bir yer tutucu olabilir latest.integration. dinamik sürümler için gradle belgeleri
Bhavik

Yanıtlar:


49

Gradle şu anda Maven'i RELEASE(nadiren kullanılan ve kullanımdan kaldırılan) desteklemiyor ancak Ivy'yi destekliyor latest.release. Bununla birlikte, genel öneri, tam sürümlere göre inşa etmektir. Aksi takdirde, yapı bir piyango haline gelebilir.


Maven, RELEASE'i de desteklemiyor. Yalnızca sabit sürüm numaraları.
khmarbaise

10
İki kez kontrol ettim. Maven RELEASEhem sürüm 2 hem de sürüm 3'te destekliyor .
Peter Niederwieser

Haklısın. Eklenti sürümlerinde yanıldım, çünkü Maven 3 için artık SÜRÜM / SONA ERİŞİM'e izin vermiyor. Ancak bu tür sürüm tanımlayıcıları kullanmak elbette kötü bir uygulamadır.
khmarbaise

Maven Release deposundaki bir yapı, tüm olası otomatik (ve belki de manuel) testleri tamamlamış olandır. Bu süreç, API uyumluluk kontrollerini, regresyon testini vb. İçermelidir. O halde yapı neden bir piyango haline gelebilir? Yalnızca yeterince test edilmemiş eserleri "yayınlıyorsanız".
RCross

2
Grade, "en yeni sürümü" destekler (ancak "SÜRÜM" ü desteklemez). Bu, kendi dahili kütüphanelerinizin en son, kanıtlanmış versiyonda olmasını sağlamak için son derece kullanışlıdır - tabii ki Peter'ın yukarıda önerdiği sebeple harici / 3. taraf kütüphaneler için kullanılmasını asla savunmam.
RCross

259

Bazen en son sürümü almak oldukça yararlı olabilir - örneğin, sıklıkla kendi bağımlılıklarınızı yayınlıyorsanız.

En son sürümü aşağıdaki gibi alabilirsiniz

compile "junit:junit:+"

veya daha iyisi, en azından ana sürümü belirtiniz

compile "junit:junit:4.+"

28
sadece kayıt için: bu gerçekten çift tırnak olmalıdır! Bağımlılık bildirimlerimin çoğu için tek tırnak kullanıyorum ve code 'junit:junit:4.+'işe yaramadığını
öğrendim

1
@azonli, en azından yerel bağımlılıklar için tek alıntılarla benim için çalışıyor gibi görünüyor. Hangi hatayı alıyorsun?
David Moles

3
"compile" yerine "testCompile" olması gerekmez mi? çünkü bir sürümde eser gerekmiyor
Martin Dürrmeier

6
Her zaman yeniden üretilebilir bir yapıya ihtiyacınız yoktur.
Lakatos Gyula

2
Eğer az gelişmişlik olduğunda @SimonForsberg ... Doğru, ancak (a) takip etmek isteyebilirsiniz kanama-kenar veya (b) v hata düzeltmeleri sağlamak 4.+projeniz için güncel tutulur. Ne zaman sen alfa, Beta, rc veya -Yayın aşamaya ulaşmak; Bu sürümleri bir direğe ' çivilemeniz ' gerektiğine tamamen katılıyorum . Bir properties' file to set version specifiers: "junit: junit: $ { junitVer }" " derlemesi kullanıyorum .
will

25

Gradle-Versions-Plugin'e göz atın. Tam olarak istediğinizi yapar: https://github.com/ben-manes/gradle-versions-plugin

Kurulum için github sayfasına bakın. Temel olarak bu iki satırı build.gradle - proje dosyanıza eklemeniz gerekir:

apply plugin: 'com.github.ben-manes.versions'

buildscript {
    [...]
    dependencies {
        classpath 'com.github.ben-manes:gradle-versions-plugin:0.8'
        [...]
    }
}
[...]

Daha sonra bu komutu proje dizininizdeki terminalde çalıştırarak eklentiyi kullanabilirsiniz:

./gradlew dependencyUpdates -Drevision=release

Ve size hangi bağımlılıkların güncelliğini yitirdiğini gösterecektir!


Eklentiyi projelerinizin her birine dahil etmek istemiyorsanız, bunu bir başlangıç ​​komut dosyasına da ekleyebilirsiniz. Ayrıntılar için başka bir soruya verilen bu cevaba bakın.
Laurence Gonsalves

ya bağımlılıklar aynı depodaysa ve her zaman en son sürümü istiyorsanız?
Barry Kelly

8

En son Gradle Kullanıcı Kılavuzu artı oturum açma sürümlerinden bahseder ve açıklar:

7.2'den itibaren . Bağımlılıklarınızı bildirmek :

dependencies {
    compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

... Yapı betiği ayrıca projenin testlerini derlemek için herhangi bir junit> = 4.0 gerektiğini belirtir.

Gönderen 23.7. Bağımlılık çözümü nasıl çalışır :

Bağımlılık dinamik bir sürüm olarak bildirilirse (1. + gibi), Gradle bunu depodaki mevcut en yeni statik sürüme (1.2 gibi) çözecektir. Maven depoları için bu, maven-metadata.xml dosyası kullanılarak yapılırken, Ivy depoları için bu, dizin listesi ile yapılır.


1
Önemli ipucu: + mutlaka en son sürümü almayabilir. Yukarıdaki yorumuma bakın.
Harry G.

3

Android Studio'da:

+Sürüm için kullanıyorsanız ve gerçekte hangi sürümün kullanıldığını bilmek istiyorsanız Project, kenar çubuğunda öğesini seçin ve ardından External Librarieskullanımda olan gerçek sürüm numarasını göreceksiniz.


Belirli bir IDE'den mi bahsediyorsunuz? :-)
Inego

Inego: evet, cevaba ekledim ;-)
lenooh
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.