Tüm projeler ve alt projeler arasındaki fark nedir


124

Çok projeli bir gradle yapısında, birisi bana "tüm projeler" bölümü ile "alt projeler" bölümü arasındaki farkın tam olarak ne olduğunu söyleyebilir mi? Sadece üst dizin mi? İkisini de kullanan var mı? Eğer öyleyse, her birine tipik olarak neyin konulacağını belirleyen genel kurallarınız var mı?

İlgili soru: iki sözdizimi arasındaki fark nedir (gerçekten tüm projeler VE alt projeler için):

subprojects {  ...
}

ve

configure(subprojects) { ...
}

Ne zaman birini diğerine geçersiniz?

Yanıtlar:


119

Çok projeli bir kademeli derlemede, bir rootProject ve alt projeleriniz vardır. Her ikisinin kombinasyonu tüm projelerdir. RootProject, derlemenin başladığı yerdir. Ortak bir model, rootProject'in koda sahip olmaması ve alt projelerin java projeleridir. Bu durumda, java eklentisini yalnızca alt projelere uygularsınız:

subprojects {
    apply plugin: 'java'
} 

Bu, yalnızca alt modülleri oluşturan bir maven agrega pom projesine eşdeğer olacaktır.

İki sözdizimiyle ilgili olarak, aynı şeyi yapıyorlar. İlki daha iyi görünüyor.


Cevabınızı anlamaya çalışıyorum ve neden "rootProject kodsuz" istesin?
Marian Paździoch

6
Koda sahip olabilir, ancak çoğu zaman sadece tüm alt projeleri tek bir kök proje altında birleştirmek içindir.
mallaudin

44

Ryan'ın cevabına ek olarak, configurenesnelerin özel alt kümelerini yapılandırmak istediğinizde yöntem önemli hale gelir. Örneğin configure([project(":foo"), project(":bar")]) { ... }veya configure(tasks.matching { it.name.contains("foo") }) { ... }.

Ne zaman kullanılmalı allprojectsvs.subprojects koşullara bağlıdır. Genellikle ikisini de kullanırsınız. Örneğin, Java eklentisi gibi kodla ilgili eklentilere tipik olarak uygulanır subprojects, çünkü birçok derlemede kök proje herhangi bir kod içermez. Eclipse ve IDEA eklentileri ise tipik olarak uygulanır allprojects. Şüpheniz varsa, örneklere ve diğer yapılara ve / veya deneylere bakın. Genel amaç, alakasız konfigürasyondan kaçınmaktır. Bu anlamda beklenen sonuçları verdiği sürece subprojectsdaha iyidir allprojects.


Ya alt projelerimden bazıları protokol arabelleklerine bağlıysa? proto-gradle-eklentisini herkese uygulamalı mıyım? veya alt veya yalnızca alt bölümdeki birkaç projeye mi?
user1870400
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.