Gradle sarıcı dosyaları nasıl / ne zaman oluşturulur?


212

Gradle Wrapper'ın nasıl çalıştığını anlamaya çalışıyorum. Birçok kaynak deposunda aşağıdaki yapıyı görüyorum:

projectRoot/
    src/
    build.gradle
    gradle.properties
    settings.gradle
    gradlew
    gradlew.bat
    gradle/
        wrapper/
            gradle-wrapper.jar
            gradle-wrapper.properties

Sorularım:

  1. Nasıl / tek üretmek ne zaman gradlew/ gradlew.bat? Onları proje ilk oluşturulduğunda yalnızca bir kez mi üretmeniz gerekiyor, her değişiklik / itişinizde bunları mı üretiyorsunuz? Ve nasıl üretiliyorlar?
  2. Yukarıdaki aynı soru, ama gradle/wrapper/*dosyalar ( gradle-wrapper.jarve gradle-wrapper.properties) için?
  3. Bazen *.gradleproje gradledizininde başka dosyalar görüyorum . Bu ek Gradle dosyaları nelerdir ve neyi temsil eder / temsil ederler? Özel eklentiler?
  4. İçine settings.gradletanımlanması gereken özelliklere karşı çıkan özellikler arasındaki fark nedir gradle.properties?

Yanıtlar:


251
  1. Projede kullandığınız Gradle sürümünü değiştirmek istediğinizde bunu bir kez ve tekrar oluşturursunuz. Bu kadar sık ​​üretmeye gerek yok. İşte dokümanlar. Sadece eklemek wrapperiçin görevi build.gradledosyası ve sarıcı yapıyı elde etmek için bu görevi çalıştırın.

    Bir sarıcı oluşturmak için Gradle'ın kurulu olması gerektiğini unutmayın . G-ekosistem yapılarını yönetmek için harika bir araç SDKMAN! . Bir sınıflayıcı sarıcı oluşturmak için, build.gradledosyaya aşağıdaki kod parçasını ekleyin :

    task wrapper(type: Wrapper) {
       gradleVersion = '2.0' //version required
    }
    

    ve koş:

    gradle wrapper
    

    görev. Ortaya çıkan dosyaları SCM'ye ekleyin (örneğin git) ve bundan sonra tüm geliştiriciler Gradle Wrapper'ı kullanırken Gradle'ın aynı sürümüne sahip olacaklar.

    Gradle 2.4 (veya üstü) ile, özel bir görev eklemeden bir sarıcı ayarlayabilirsiniz:

    gradle wrapper --gradle-version 2.3
    

    veya

    gradle wrapper --gradle-distribution-url https://myEnterpriseRepository:7070/gradle/distributions/gradle-2.3-bin.zip
    

    Tüm detayları burada bulabilirsiniz

Gradle'dan 3.1 --distribution-typeseçeneği de kullanılabilir. Seçenekler ikili ve tümü ve bin'tir . hepsi ayrıca kaynak kodu ve dokümantasyon içerir. IDE kullanıldığında her şey daha iyidir, bu nedenle editör daha iyi çalışır. Dezavantajı yapı daha uzun sürebilir (CI sunucusunda anlamsız, daha fazla veri indirmek gerekir) ve daha fazla yer alacaktır.

  1. Bunlar Gradle Wrapper dosyalarıdır. Bunları bir kez (belirli bir sürüm için) oluşturmanız ve sürüm kontrolüne eklemeniz gerekir. Gradle Wrapper'ın sürümünü değiştirmeniz gerekiyorsa, build.gradlebkz. (1.) ' deki sürümü değiştirin ve dosyaları yeniden oluşturun.

  2. Ayrıntılı bir örnek veriniz. Bu dosyanın birden fazla amacı olabilir: çok modüllü proje, sorumluluk ayrımı, biraz değiştirilmiş komut dosyası, vb

  3. settings.gradleprojenin yapısından (modüller, isimler, vb.) gradle.propertiessorumluyken, projenin ve Gradle'ın dış detayları (sürüm, komut satırı bağımsız değişkenleri -XX, özellikler vb.) için kullanılır.


Teşekkürler @Opal (+1) - # 3 için belirli bir örnek vermek için Netflix-Eureka'ya bakın . Bu Gradle dosyaları nedir?!?
smeeb

Tamam, görüyorum. Gördüğüm kadarıyla, Netflix'ten geliştiriciler sadece bir büyük build.gradlebetiği çok daha kısa bir sürüme böldüler ve belirli bir amaçlı betiğe adadılar. Sen altında bulunan komut gibi gradle dir ana uygulanan build.gradledosya, bakış: github.com/Netflix/eureka/blob/master/build.gradle . Bu modülleri nereye koyacağınız sizin seçiminizdir. Genel olarak hepsi bu. Cevaptan memnunsanız lütfen cevabı kabul edin :)
Opal

1
Başka bir yararlı komut satırı seçeneği --distribution-type, örn.,gradle wrapper --gradle-version 4.3.1 --distribution-type ALL
heenenee

1
Teşekkürler @heenenee, cevabıma ekleyeceğim.
Opal

İpucu: Android Studio'nun yükleme klasöründe bir Gradle vardır.
TWiStErRob

29

Kepçe Sarmalayıcısını Oluşturma

Proje oluşturma aşaması

// Top-level build file where you can add configuration options common to all sub-projects/modules.

// Running 'gradle wrapper' will generate gradlew - Getting gradle wrapper working and using it will save you a lot of pain.
task wrapper(type: Wrapper) {
    gradleVersion = '2.2' 
}

// Look Google doesn't use Maven Central, they use jcenter now.
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

Sonra komut satırında çalıştırın

gradle wrapper

Sisteminizde gradle eksikse kurun veya yukarıdaki işe yaramaz. Mac'te Homebrew ile kurmak en iyisidir.

brew install gradle

Sarıcı görevini başarıyla çalıştırıp oluşturduktan sonra gradlew, sistem sınıfınızı kullanmayın. Size çok fazla baş ağrısı kurtaracak.

./gradlew assemble

Yukarıda görülen gradle eklentisi ne olacak?

com.android.tools.build:gradle:1.0.1

Sürümü en son sürüm olarak ayarlamanız gerekir ve araçlar sayfasını kontrol edebilir ve sürümü buna göre düzenleyebilirsiniz.

Android Studio'nun neler ürettiğini görün

Gradle'ın eklenmesi ve en yeni Android Studio, proje düzenini önemli ölçüde değiştirdi. Daha eski bir projeniz varsa, en son Android Studio ile temiz bir proje oluşturmanızı ve Google'ın standart proje hakkında ne düşündüğünü görmenizi şiddetle tavsiye ederim.

Android Studio, eski projeleri içe aktarmak için yardımcı olabilecek olanaklara sahiptir.


gradleVersion = '2.2'içinde taskWrapperben sarıcı oluşturmak için arzu ne olursa olsun sürümü, doğru kullanabilir? Gradle'ın son sürümü olmak zorunda değil misiniz?
raffian

1
Sanırım 2 seriler arasında gidebilirsin. 2.x'ten önce hiç emin değilim, ama hayır, mutlak son sürümü takip etmesine gerek yok.
Cameron Lowell Palmer

18

Gradle 2.4'ten itibaren, dosyanıza gradle wrapper --gradle-version X.Xherhangi bir görev eklemeden Gradle sarıcısının belirli bir sürümünü yapılandırmak için kullanabilirsiniz build.gradle. Sarıcıyı bir sonraki kullanışınızda, eşleştirmek için uygun Gradle dağıtımını indirir.


10

Gradle'ı kaynak ve dokümanlarla indirmek istiyorsanız, gradle-wrapper.properites'te yapılandırılan varsayılan dağıtım URL'si ihtiyacınızı karşılamaz. Https://services.gradle.org/distributions/gradle-2.10-bin.zip , değil https://services.gradle.org/distributions/gradle-2.10-all.zip .Bu tam URL, Android Studio gibi IDE tarafından önerilmektedir.Tam dereceyi indirmek istiyorsanız, sarma görevini bu şekilde yapılandırabilirsiniz :

task wrapper(type: Wrapper) {
    gradleVersion = '2.13'
    distributionUrl = distributionUrl.replace("bin", "all")
}

1
Daha yeni kepçe yapıları ile (tam olarak hangisi olduğundan emin değilim) - URL'yi manuel olarak yeniden yazmak yerine, dahili komutu aynı kapatmada kullanmak muhtemelen en iyisidir: distributionType = Wrapper.DistributionType.ALL
Dave Birch

6

Bu, Gradle'a sarmalayıcıyı kaynak kodunu içeren kitaplıkların dağıtım sürümlerini alacak şekilde yükseltmesini bildirmek için kullanılacak komuttur:

./gradlew wrapper --gradle-version <version> --distribution-type all

Dağıtım türünü "all" ile belirtmek, Gradle'ın geliştirme ortamınız tarafından kullanılmak üzere kaynak dosyaları indirmesini sağlayacaktır.

Artıları :

  • IDE'lerin kaynak koduna anında erişimi olacaktır. Örneğin, Intellij IDEA derleme komut dosyalarınızı kaynak dağıtımını içerecek şekilde güncellemenizi istemez (çünkü bu komut zaten bunu yapmıştı)

Eksileri :

  • Kaynak kodunu indirdiği için daha uzun / daha büyük oluşturma süreci. Bu, kaynak kodun gerekli olmadığı bir yapı veya CI sunucusunda zaman / alan kaybıdır.

Gradle'a bir yapı sunucusuna kaynak indirmemesini bildiren herhangi bir komut satırı seçeneği biliyorsanız lütfen yorum yapın veya başka bir yanıt verin.


1
Bu ayarın kütüphanelerle ilgili olduğundan emin misiniz? Resmi dokümanlar aksini söyler ve yalnızca sargının kendisine başvurur: "Sarıcı tarafından kullanılacak Gradle dağılımının türü." docs.gradle.org/current/dsl/…
Thorsten Schöning

2
  1. Bunları bir kez oluşturacaksınız, ancak yeni bir özelliğe veya bir eklentiden daha yeni bir sürüm sürümüne ihtiyaç duyan bir şeye ihtiyacınız varsa güncelleyin.

    Güncellemenin en kolay yolu: Gradle 2.2'den itibaren, tam veya ikili Gradle dağıtımını indirip çıkarabilir ve çalıştırabilirsiniz:

    $ <pathToExpandedZip>/bin/gradle wrapper
    

    Bir görev tanımlamanıza gerek yoktur, ancak muhtemelen bir tür build.gradledosyaya ihtiyacınız vardır .

    Bu güncelleme veya yaratacak gradlewve gradlew.batsıra olarak sargı gradle/wrapper/gradle-wrapper.propertiesve gradle-wrapper.jargradle geçerli sürümünü, sarılmış sağlamaktır.

  2. Bunların hepsi sargının bir parçası.

  3. Bazı build.gradledosyalar, alt projelerdeki veya alt projeler veya modüller olan diğer dosyalara veya dosyalara başvurur. Biraz karmaşıklaşır, ancak bir projeniz varsa temel olarak tek bir dosyaya ihtiyacınız vardır.

  4. settings.gradleproje, modül ve diğer tür isimleri ve ayarları gradle.propertiesyönetir, isterseniz gradle dosyalarınız için yeniden kullanılabilir değişkenleri yapılandırır ve bu şekilde daha net olacağını hissedersiniz.


2

Sınıfta yerleşik görevler 4.8'de kullanımdan kaldırıldığından aşağıdakileri deneyin

wrapper {
   gradleVersion = '2.0' //version required
}

ve koş

gradle wrapper
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.