Dans la documentation Gradle pour l'option plugin java-library Il y est dit que
Le plugin Java Library étend les capacités du plugin Java en fournissant des connaissances spécifiques sur les bibliothèques Java. En particulier, une bibliothèque Java expose une API aux consommateurs (c'est-à-dire d'autres projets utilisant le plugin Java ou le plugin Java Library)
Cette déclaration implique que seuls les programmes Java destinés à être consommés (bibliothèques) doivent utiliser la fonction java-library
tandis que les programmes Java qui ne sont pas destinés à être consommés (applications) devraient utiliser le plugin java
plugin.
Avant d'utiliser le java-library
brancher une racine build.gradle
pourrait contenir les éléments suivants :
subprojects {
apply plugin: 'java'
sourceCompatibility '1.8'
targetCompatibility '1.8'
// other common java stuff
}
Cependant, dans les projets multi-modules qui contiennent à la fois des applications et des bibliothèques, vous ne pouvez pas déléguer la sélection des plugins aux sous-projets et vous vous retrouvez avec le problème Root suivant build.gradle
:
subprojects {
sourceCompatibility '1.8'
targetCompatibility '1.8'
// other common java stuff
}
Cette opération échouera pour les raisons suivantes sourceCompatibility
y targetCompatibility
sont définis par le java
y java-library
plugins. Idéalement, je voudrais faire ce qui suit :
subprojects {
apply plugin: 'java-library'
sourceCompatibility '1.8'
targetCompatibility '1.8'
// other common java stuff
}
Existe-t-il une raison d'imposer aux applications Java l'utilisation de l'option java
et que les bibliothèques Java utilisent le plugin java-library
plugin ? Y a-t-il une raison pour que le java
doit être utilisé à la place du plugin java-library
plugin ?
Editer
Pour clarifier ma question, dans les exemples de Gradle, il y a un projet multi-modules pour lequel l'option java
plugin aquí et pour les java-library
plugin aquí . Dans l'échantillon pour le java
le plugin Root build.grade utilise le plugin apply plugin: 'java'
. Le fichier build.gradle racine pour le projet java-library
n'utilise aucun plugin. Le projet d'application utilise apply plugin: 'java'
; tandis que les projets core et utils utilisent apply plugin: 'java-library'
.
Ma question est la suivante : pourquoi certains projets devraient-ils utiliser l'option java
et d'autres utilisent le plugin java-library
plugin ? Il semble qu'il soit plus difficile de ne pas violer le principe DRY. Il est difficile de spécifier le sourceCompatibility
y targetCompatibility
une seule fois. Je pense à plusieurs façons de spécifier ces propriétés une seule fois, mais la solution la plus simple semble être l'utilisation de l'élément java-library
pour tous les projets.
Y a-t-il un avantage à utiliser le java
pour certains sous-projets et le plugin java-library
plugin pour les autres ?