Gradle görevlerinin UP-TO-DATE özelliğini sıfırlıyor musunuz?


106

Bir derecelendirme görevini tekrar çalışmaya zorlamanın veya tüm görevleri GÜNCEL OLMAYAN durumuna sıfırlamanın bir yolu var mı ?

Yanıtlar:


133

-C rebuildDerlemenizi Gradle'ın önbelleğini yeniden oluşturan bir şekilde çalıştırmayı deneyin .

Gradle'ın daha yeni sürümlerinde, --rerun-tasks


89

Yalnızca tek bir görevin her zaman çalışmasını istiyorsanız, outputsözelliği görevin içinde ayarlayabilirsiniz .

outputs.upToDateWhen { false }

Görevinizde tanımlanmış herhangi bir dosya girişi yoksa, Gradle'ın yukarıdaki kodu kullanırken bile görevi atlayabileceğini lütfen unutmayın. Örneğin, bir Zip veya Copy görevinde , görev tanımının yapılandırma aşamasında sağlanan en az bir dosya olması gerekir .


14
Bu benim için hiçbir şey yapmaz. Bunu bir göreve ekledim ve "GÜNCEL" alıyorum. Komik olan şey, bunun bir ZipTask olması ve hedef arşivini sildim.
maaartinus

5
Bu, bunun gibi kullanım için inanılmaz:tasks.whenTaskAdded { theTask -> if (theTask.name.startsWith("dex")) { theTask.outputs.upToDateWhen { false } theTask.doLast { task ->... }}}
Martin L.

Görevin çalışmayacağı durum için güncellenmiş cevap.
cmcginty

Günümüzde gradle yerleşik önbellek etkinleştirildiğinde, bunun görevin tekrar çalışmasına neden olmayacağını, ancak çıktısının önbellekten geri yükleneceğini unutmayın.
Stephen Friedrich

25

Kullanabilirsiniz cleanTaskname

Sahip olduğunu varsayalım

:someproject:sometask1 UP-TO-DATE
:someproject:sometask2 UP-TO-DATE
:someproject:sometask3 UP-TO-DATE

Ve şunu söyleyelim sometask2'yi tekrar çalıştırmaya zorlamak istiyorsanız,

someproject:cleanSometask2

hepsini çalıştıran görevi çalıştırmadan önce.

Görünüşe göre kademeli olarak, GÜNCELLEMEYİ anlayan her görev aynı zamanda kendini nasıl temizleyeceğini de anlıyor.


1
'gradle clean', içinde bulunduğunuz proje için her şeyi temizleyecektir. Temel olarak, varsayılan olarak '/ build' olan ana çıktı klasörünüzü siler. Aradığın bu muydu?
c_maker

6
Hayır. Belirli bir görev için hiç çıktı dosyası olmadığı için güncel olarak yakalanmışsa, bu yeniden güncellenmez. Yani, derleme molasının bir kısmını yaşadıysam ancak genel olarak başarılı olsaydım, yakalanan durum yanlıştır ve onu temizlemem gerekir.
Stefan Kendall

1
normalde $ buildDir'deki her şeyi silen 'temiz' görev, temel eklenti tarafından tanıtıldığı için derleme betiklerinde mevcuttur.
Rene Groeschke

5

Ben ayarı zor bir durum vardı outputs.upToDateWhen { false }görevi içinde veya bayrak ekleme --rerun-tasksgörevin beri yardım etmedi setOnlyIftutulması olmanın sette falseben koştum her zaman.

Yürütmeyi build.gradlezorlamak için aşağıdakileri eklemek myTask:

gradle.taskGraph.whenReady { taskGraph ->
  def tasks = taskGraph.getAllTasks()
  tasks.each {
    def taskName = it.getName()
    if(taskName == 'myTask') {
      println("Found $taskName")

      it.setOnlyIf { true }
      it.outputs.upToDateWhen { false }
    }
  }
}
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.