Dépendance “fournie” à Gradle

J’ai build.gradle devant moi et certaines dépendances sont déclarées telles que provided mais dans la documentation, je ne vois pas cette étendue de dépendance.

 dependencies { comstack("org.springframework.boot:spring-boot-starter-web:1.2.4.RELEASE") .... provided 'backport-util-concurrent:backport-util-concurrent:3.1' provided 'org.javolution:javolution:5.5.1@jar .... } 

Est-ce fourni par un plugin? Si oui, comment puis-je savoir à quel plugin appartient cette application?

Quelle est la différence entre la scope de dépendance provided et d’ runtime dans Gradle?

Quelle est la scope provided ?

Supposons qu’un jar soit nécessaire pour comstackr votre code, mais qu’il soit présent dans la collection de bibliothèques de l’environnement de production. Dans ce cas, vous n’avez pas besoin de conditionner le pot avec les archives de votre projet. Pour répondre à cette exigence, Maven a une étendue nommée provided . Si vous déclarez une dépendance de fichier jar telle qu’elle est provided , ce fichier jar sera présent dans votre chemin de classe lors de la compilation, mais ne sera pas intégré à votre archive de projet.

provided scope provided est très utile, en particulier dans les applications Web. Par exemple, servlet-api.jar doit être présent dans votre servlet-api.jar pour comstackr votre projet, mais vous n’en avez pas besoin pour empaqueter le fichier servlet-api.jar avec votre war . Avec la scope provided on peut atteindre cette exigence.

Il n’y a pas de domaine défini dans le plugin java Gradle nommé provided . Aussi pas dans la war ou les plugins android . Si vous souhaitez utiliser la scope provided dans votre projet, vous devez la définir dans votre fichier build.gradle . Voici l’extrait de code à déclarer provided scope provided dans Gradle:

 configurations { provided } sourceSets { main { comstackClasspath += configurations.provided } } 

Maintenant, votre deuxième question:

Quelle est la différence entre la scope de dépendance fournie et d’exécution dans Gradle?

Pour répondre d’abord à cette question, je vais définir la dépendance à la comstack . comstack dépendances de comstack sont des dépendances, elles sont nécessaires pour comstackr votre code. Imaginez maintenant que si votre code utilise une bibliothèque nommée X vous devez alors déclarer X comme dépendance à la compilation. Imaginez également que X utilise une autre bibliothèque Y interne et que vous avez déclaré Y comme dépendance à l’exécution.

Lors de la compilation, Gradle appenda X dans votre chemin de classe mais n’appenda pas Y Depuis, Y n’est pas requirejs pour la compilation. Cependant, il archivera à la fois X et Y avec votre archive de projet, car X et Y sont nécessaires pour exécuter votre archive de projet dans l’environnement de production. En règle générale, toutes les dépendances nécessaires dans l’environnement de production sont appelées dépendances à l’ runtime .

Dans la documentation officielle de Gradle, il est indiqué que runtime dépendances d’ runtime sont ” les dépendances requirejses par les classes de production au moment de l’exécution. Par défaut, elles incluent également les dépendances de la compilation “.

Maintenant, si vous avez lu jusque-là, vous savez déjà que c’est une dépendance de comstack que nous ne voulons pas voir figurer dans la dépendance d’ runtime (en gros, nous ne voulons pas qu’elle soit mise en package avec l’archive de projet).

Voici une illustration de la scope provided et de la runtime . Dans ce cas, comstack fait référence aux dépendances requirejses pour comstackr le projet et non-comstack correspond aux dépendances non requirejses pour la compilation du projet.