Gradle'da buildscript bloğunun amacı


235

Gradle'da yeniyim ve belgeleri okuyorum ama bazı kısımlarını anlamıyorum. Bu parçalardan biri buildscriptblok ile bağlıdır . Amacı nedir?

Derleme betiğinizin harici kitaplıklar kullanması gerekiyorsa, bunları derleme betiğinin kendisindeki betiğin sınıfyoluna ekleyebilirsiniz. Bunu buildscript sınıf yolunu bildiren bir kapatma ileterek buildscript () yöntemini kullanarak yaparsınız.

buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    classpath group: 'commons-codec', name: 'commons-codec', version: '1.2'
  }
}

Tamam ama farkı nedir:

repositories {
  mavenCentral()
}
dependencies {
  compile group: 'commons-codec', name: 'commons-codec', version: '1.2'
}

Örneğin, neden kullanılmalı buildscript?


Yanıtlar:


178

buildScriptEklentileri blok hızları, görev sınıfları ve diğer sınıflar içinde kullanım için mevcuttur inşa script kalanı . Bir buildScriptblok olmadan , Gradle ile birlikte gelen her şeyi kullanabilirsiniz. Ek olarak üçüncü taraf eklentileri, görev sınıflarını veya diğer sınıfları (derleme betiğinde!) Kullanmak istiyorsanız, buildScriptblokta karşılık gelen bağımlılıkları belirtmeniz gerekir .


2
Em'i anlayamıyorum. Grupsample.infotask', name: 'infotask', version: '1.0' ile bir görev sınıfı yazdım : Ve yerel repo ../lib ' yüklemek için _uploadArchives görevini kullanın Başka bir projede görevimi kullanırsanız yazmalısınız: `buildscript {repositories {maven {url' file: ../ lib '}} bağımlılıklar {classpath group:' sample.infotask ', isim:' infotask ', sürüm:' 1.0 '}} Haklı mıyım? Neden buildScript bloğunu kullanmalıyız ? Yerel eser yüklediğimde makinemde kavanoz var. Ve sadece Gradle'a sınıf yoluma nereye ve ne koyacağımı söylemeliyim, burada özel olan nedir?
Xelian

40
Bir buildScriptblok kullanmalısınız çünkü Gradle derleme komut dosyasının geri kalanını anlamak için bu bilgilere ihtiyaç duyar . Bu yüzden bu bilgiyi ayrı bir kanalda ( buildScriptblok) sağlamanız gerekir . Teknik olarak konuşan Gradle , derleme komut dosyasının geri kalanını derlemek ve değerlendirmek için bu bilgilere ihtiyaç duyar . Başlık altında olan şey, Gradle'ın yapı komut dosyasını iki komut dosyasına ( buildScriptblok ve diğer her şey) ayırmasıdır, böylece bunları ayrı olarak işleyebilir.
Peter Niederwieser

1
Bu cevapları başka cevapları okuduktan sonra okursanız, Peter'ın ne söylemek istediğini anlayabilirsiniz (ve oldukça doğrudur). Ancak ikinci satır - "Bir buildScript bloğu olmadan, kutudan çıkar çıkmaz gelen her şeyi kullanabilirsiniz" - ans'ı belirsiz kılan şeydir.
Dexter

her şeyi anlamamı sağlayan hızlı bir not. "buildscript" kullanırken, buildscript {...} içindeki bağımlılıkların Java / Kotlin kodu / programı (veya kullandığınız her şey) tarafından kullanılmadığını söylüyorsunuz. Ancak bunun yerine, SADECE not dizeleri tarafından kullanılması amaçlanmıştır. Örneğin, varsayılan olarak sağlanmayan bazı eklentileri kullanmanız gerekir, daha sonra bunu {...} buildscript'ine eklersiniz ve yalnızca gradle komut dosyalarında kullanabilirsiniz. umut olur
cesarmax

153
  • Genel düzey dependenciesve repositoriesbölümler, kaynağınızı oluşturmak ve kaynağınızı çalıştırmak için gereken bağımlılıkları listeler.
  • buildscriptİçindir build.gradledosyasının kendisini. Yani, bu RPM'ler oluşturmak için bağımlılıklar Dockerfileve tüm bağımlılarda görevleri çalıştırmak için diğer bağımlılıkları içerir.build.gradle

4
Sınıflandırılacak tüm uzantılar buildscript-> bağımlılıkları aracılığıyla bulunur ve bu da buildscript-> depolar bölümünden indirilir. buildscript bloğu, kaynak derleme gibi derleme görevinin yürütülmesine başlamadan önce ilk olarak çalıştırılır (derleme sistemi hazırlama aşaması)
Raja Nagendra Kumar

4
buildscriptyapı betiğiniz için bağımlılıktır
18:28

3
buildscript is node.js dosyasında devDependencies, üst düzey = bağımlılıklar.
Jacob

67

Peter'ın cevabını takdir ediyorum ... ama derleme betiğinin geri kalanının cevapta ve belgelerde vurgulandığı gibi ne anlama geldiğini hemen anlayamadım .

Genellikle bağımlı işlevsellik getirmek Java programında veya yazdığınız diğer programlarda kullanmak içindir. Baharda getirmek demek, derleme betiğinde değil, Java programında kullanılmalıdır. Koyarak buildscriptbağımlılıkları gradle yapı kendi içinde kullanımına açıktır kapatma sağlar. Çıktı programı değil.


8

"Buildscript" yapılandırma bölümü, gradle'ın kendisi içindir (yani gradle'ın derlemeyi nasıl gerçekleştirebileceğini değiştirir). Bu nedenle, bu bölüm genellikle Android Gradle eklentisini içerir.


2

Biraz yüksek ama umut yardımcı oluyor.

Benim için, yapı taşı , yöntem ve görevin ne olduğunu anlamaya başladığımda net bir ayrım oluşmaya başladı . Sözdizimi nasıl göründüğü, bunları nasıl yapılandırabileceğiniz vb. Bu yüzden tüm bunları gözden geçirmenizi öneririm. Bundan sonra, bu sözdiziminden bir anlam çıkarmaya başlayabilirsiniz.

Daha sonra bir build.gradle dosyasının içinde ne olabileceğinizi bilmek için build.gradle (Project sınıfının bir örneği) nesnesinin ne tür olduğunu bilmek çok önemlidir. Bu, 'buildScript'in ve diğerlerinin nereden geldiğini yanıtlar. Ve yeteneklerinizi / özelliklerinizi genişletmek için (diyelim android), eklentilerin nasıl yardımcı olabileceğini görün.

Son fakat en az değil, burada senaryoyu anlamak için gerekli kavramlar olan kapanışlar, delegeler hakkında konuşan çok iyi bir öğretici var.


1

Android üst düzey gradle dosyasını göstererek biraz daha açıklama.

buildscript {
    // this is where we are going to find the libraries defined in "dependencies block" at below
    repositories {
        google()
        jcenter()
        maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
    }

    // everything listed in the dependencies is actually a plugin, which we'll do "apply plugin" in our module level gradle file.
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.2' // this is android gradle plugin
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // kotlin gradle plugin
    }
}

modül düzeyinde not dosyası

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

"Eklenti" nedir? Bunlar sadece Plugin arabirimini uygulayan java sınıflarıdır. Arayüz altında, farklı adlara sahip birden fazla görev nesnesi eklemek için "uygula" yöntemi vardır. Görev, iş akışını uygulayabileceğimiz bir sınıftır. Örneğin, oluşturma görevi, uygulamayı oluşturma akışından oluşur.

Peki buildscript ne yapar? Eklentilerin nerede bulunacağını tanımlar. Eklenti ne yapar? Birden fazla görevi kapsar. Görev ne yapar? Bize yapı, kurulum, tiftik vb.

Anlayışım yanlış olabilir. Yanıltıcı bir şey bulursanız lütfen beni düzeltmekten çekinmeyin.

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.