Gradle - Görevler

Gradle build script bir veya daha fazla Projeyi açıklar. Her proje farklı görevlerden oluşur. Görev, bir yapının gerçekleştirdiği bir iş parçasıdır. Görev, bazı sınıfları derliyor, sınıf dosyalarını ayrı hedef klasörde depoluyor, JAR oluşturuyor, Javadoc oluşturuyor veya bazı başarıları bir havuzda yayınlıyor olabilir.

Bu bölüm görevin ne olduğu ve bir görevin nasıl oluşturulup yürütüleceğini açıklar.

Görevleri Tanımlama

Görev, komut dosyası oluşturmak için bir görevi tanımlamak için kullanılan bir anahtar sözcüktür. Adlı bir görevi temsil eden aşağıdaki örneğe bir göz atınhello bu yazdırır tutorialspoint. Aşağıdaki komut dosyasını kopyalayıp adlı bir dosyaya kaydedin.build.gradle. Bu derleme betiği, tutorialspoint dizesini yazdırmak için kullanılan bir görev adı merhaba tanımlar.

task hello {
   doLast {
      println 'tutorialspoint'
   }
}

Komut isteminde aşağıdaki komutu yürütün. Yukarıdaki betiği çalıştırır. Bunu build.gradle dosyasının depolandığı yerde yürütmelisiniz.

C:\> gradle –q hello

Çıktı:

tutorialspoint

Bu merhaba görevini bir kısayol belirterek basitleştirebilirsiniz (bir <<) için doLastBeyan. Bu kısayolu yukarıdaki göreve eklersenizhello aşağıdaki komut dosyası gibi görünecektir.

task hello << {
   println 'tutorialspoint'
}

Yukarıdaki komut dosyasını kullanarak çalıştırabilirsiniz. gradle –q hello komut.

İşte bir görevi tanımlamanın bazı varyasyonları, ona bir göz atın. Aşağıdaki örnek bir görevi tanımlarhello.

Aşağıdaki kodu kopyalayıp şuraya kaydedin: build.gradle dosya.

task (hello) << {
   println "tutorialspoint"
}

Komut isteminde aşağıdaki komutu yürütün. Yukarıda verilen betiği çalıştırır. Bunu build.gradle dosyasının saklandığı yerde yürütmelisiniz.

C:\> gradle –q hello

Çıktı:

tutorialspoint

Görev adları için dizeleri de kullanabilirsiniz. Aynı merhaba örneğine bir göz atın. Burada String'i görev olarak kullanacağız.

Aşağıdaki kodu kopyalayıp şuraya kaydedin: build.gradle dosya.

task('hello') << {
   println "tutorialspoint"
}

Komut isteminde aşağıdaki komutu yürütün. Yukarıda verilen betiği çalıştırır. Bunu build.gradle dosyasının saklandığı yerde yürütmelisiniz.

C:\> gradle –q hello

Çıktı:

tutorialspoint

Bir görevi tanımlamak için alternatif sözdizimi de kullanabilirsiniz. Bu, bir görevi tanımlamak için create () yöntemini kullanıyor. Aşağıda verilen aynı merhaba örneğine bir göz atın.

Aşağıdaki kodu kopyalayın ve şuraya kaydedin: build.gradle dosya.

tasks.create(name: 'hello') << {
   println "tutorialspoint"
}

Komut isteminde aşağıdaki komutu yürütün. Yukarıda verilen betiği çalıştırır. Bunu build.gradle dosyasının saklandığı yerde yürütmelisiniz.

C:\> gradle –q hello

Çıktı:

tutorialspoint

Görevleri Bulma

Derleme dosyasında tanımladığınız görevleri bulmak istiyorsanız, ilgili standart proje özelliklerini kullanmanız gerekir. Bu, her görevin, özellik adı olarak görev adı kullanılarak projenin bir özelliği olarak mevcut olduğu anlamına gelir.

Görevlere özellik olarak erişen aşağıdaki koda bir göz atın.

Aşağıdaki kodu kopyalayın ve şuraya kaydedin: build.gradle dosya.

task hello

println hello.name
println project.hello.name

Komut isteminde aşağıdaki komutu yürütün. Yukarıda verilen betiği çalıştırır. Bunu build.gradle dosyasının saklandığı yerde yürütmelisiniz.

C:\> gradle –q hello

Çıktı:

hello
hello

Görevler koleksiyonu aracılığıyla tüm özellikleri de kullanabilirsiniz.

Aşağıdaki kodu kopyalayıp şuraya kaydedin: build.gradle dosya.

task hello

println tasks.hello.name
println tasks['hello'].name

Komut isteminde aşağıdaki komutu yürütün. Yukarıda verilen betiği çalıştırır. Bunu build.gradle dosyasının saklandığı yerde yürütmelisiniz.

C:\> gradle –q hello

Çıktı:

hello
hello

Görevleri kullanarak görev yoluna da erişebilirsiniz. Bunun için getByPath () yöntemini bir görev adı veya göreceli bir yol veya mutlak bir yolla çağırabilirsiniz.

Aşağıdaki kodu kopyalayın ve şuraya kaydedin: build.gradle dosya.

project(':projectA') {
   task hello
}
task hello

println tasks.getByPath('hello').path
println tasks.getByPath(':hello').path
println tasks.getByPath('projectA:hello').path
println tasks.getByPath(':projectA:hello').path

Komut isteminde aşağıdaki komutu yürütün. Yukarıda verilen betiği çalıştırır. Bunu build.gradle dosyasının saklandığı yerde yürütmelisiniz.

C:\> gradle –q hello

Çıktı:

:hello
:hello
:projectA:hello
:projectA:hello

Görevlere Bağımlılıklar Ekleme

Bir görevi başka bir göreve bağımlı hale getirebilirsiniz, yani bir görev tamamlandığında yalnızca başka bir görev başlayacaktır. Her görev, görev adı ile farklıdır. Görev adlarının toplanması, görevler koleksiyonu tarafından belirtilir. Başka bir projedeki bir göreve atıfta bulunmak için, projenin yolunu, ilgili görev adına önek olarak kullanmalısınız.

TaskX'ten taskY'ye bir bağımlılık ekleyen aşağıdaki örnek.

Aşağıdaki kodu kopyalayın ve şuraya kaydedin: build.gradledosya. Aşağıdaki koda bir göz atın.

task taskX << {
   println 'taskX'
}
task taskY(dependsOn: 'taskX') << {
   println "taskY"
}

Komut isteminde aşağıdaki komutu yürütün. Yukarıda verilen betiği çalıştırır. Bunu yürütmelisiniz,build.gradle dosya depoları.

C:\> gradle –q taskY

Çıktı:

taskX
taskY

Yukarıdaki örnek, adlarını kullanarak göreve bağımlılık eklemektir. Bir Task nesnesi kullanarak bağımlılığı tanımlayan görev bağımlılığını elde etmenin başka bir yolu vardır.

TaskX'e bağımlı olan aynı taskY örneğini alalım, ancak görev referans adları yerine görev nesneleri kullanıyoruz.

Aşağıdaki kodu kopyalayıp şuraya kaydedin: build.gradle dosya.

task taskY << {
   println 'taskY'
}
task taskX << {
   println 'taskX'
}
taskY.dependsOn taskX

Komut isteminde aşağıdaki komutu yürütün. Bunu build.gradle dosyasının depolandığı yerde yürütmelisiniz.

C:\> gradle –q taskY

Çıktı:

taskX
taskY

Yukarıdaki örnek, adlarını kullanarak göreve bağımlılık eklemektir. Bir Task nesnesi kullanarak bağımlılığı tanımlayan görev bağımlılığını elde etmenin başka bir yolu vardır.

Burada, taskY'nin taskX'e bağlı olduğu örneğini alıyoruz, ancak görev referans adları yerine görev nesneleri kullanıyoruz. Bir göz atın.

Aşağıdaki kodu kopyalayın ve şuraya kaydedin: build.gradledosya. Aşağıdaki koda bir göz atın.

task taskX << {
   println 'taskX'
}
taskX.dependsOn {
   tasks.findAll { 
      task → task.name.startsWith('lib') 
   }
}
task lib1 << {
   println 'lib1'
}
task lib2 << {
   println 'lib2'
}
task notALib << {
   println 'notALib'
}

Komut isteminde aşağıdaki komutu yürütün. Yukarıda verilen betiği çalıştırır. Bunu yürütmelisiniz,build.gradle dosya depoları.

C:\> gradle –q taskX

Çıktı:

lib1
lib2
taskX

Göreve Açıklama Ekleme

Görevinize bir açıklama ekleyebilirsiniz. Bu açıklama yürütülürken görüntülenirGradle tasks. Bu, açıklama anahtar sözcüğünü kullanarak mümkündür.

Aşağıdaki kodu kopyalayıp şuraya kaydedin: build.gradledosya. Aşağıdaki koda bir göz atın.

task copy(type: Copy) {
   description 'Copies the resource directory to the target directory.'
   from 'resources'
   into 'target'
   include('**/*.txt', '**/*.xml', '**/*.properties')
   println("description applied")
}

Komut isteminde aşağıdaki komutu yürütün. Bunu build.gradle dosyasının depolandığı yerde yürütmelisiniz.

C:\> gradle –q copy

Komut başarıyla yürütülürse, aşağıdaki çıktıyı alacaksınız.

description applied

Görevleri Atlama

Atlama görevleri, bir yüklem kapanışı geçirilerek yapılabilir. Bu, yalnızca bir görev yöntemi veya birStopExecutionException bir görevin fiili çalışması yürütülmeden önce.

Aşağıdaki kodu kopyalayıp şuraya kaydedin: build.gradle dosya.

task eclipse << {
   println 'Hello Eclipse'
}

// #1st approach - closure returning true, if the task should be executed, false if not.
eclipse.onlyIf {
   project.hasProperty('usingEclipse')
}

// #2nd approach - alternatively throw an StopExecutionException() like this
eclipse.doFirst {
   if(!usingEclipse) {
      throw new StopExecutionException()
   }
}

Komut isteminde aşağıdaki komutu yürütün. Bunu build.gradle dosyasının depolandığı yerde yürütmelisiniz.

C:\> gradle –q eclipse

Görev Yapısı

Gradle, görevlerle çalışırken farklı aşamalara sahiptir. Her şeyden önce, doğrudan bir görevin kapanışında belirtilen kodun yürütüldüğü bir yapılandırma aşaması vardır. Konfigürasyon bloğu, yalnızca daha sonra fiilen yürütülen görevler için değil, mevcut her görev için yürütülür.

Yapılandırma aşamasından sonra, yürütme aşaması, kodu doFirst veya doLast gerçekte yürütülen bu görevlerin kapanışları.