web-dev-qa-db-fra.com

IntelliJ gradle ajouter une dépendance de module

Utilisation d'IntelliJ 2016.2.
Utiliser Gradle 2.14.1

J'ai 2 projets, chacun avec leurs propres fichiers build.gradle et des structures de répertoires distinctes:

myLib (meant to be jarred and used by others)
  - build.gradle
  - settings.gradle
  - src/main/Java/...

sandbox (spring boot web app)
  - build.gradle
  - settings.gradle
  - src/main/Java/...
  - src/main/resources/...

J'espère que vous obtenez l'image. Dans IntelliJ, j'ai la structure de module suivante, au même niveau (pas de sous-projets):

- myLib
- sandbox

Demande simple ... Je veux utiliser myLib au sein de l'application sandbox. Je veux les deux modules dans le même projet afin de développer les deux.

J'ai essayé d'ajouter une dépendance de module à sandbox pour myLib dans IntelliJ. Pas de dé. J'ai essayé d'ajouter une référence de pot, pas de dés.

Je crois que j'ai besoin d'ajouter une dépendance dans le fichier build.gradle mais je ne peux pas comprendre comment. J'ai essayé compile files '<path to myLib.jar>', etc. Pas de dés.

20
emiles

Modules locaux

Ceci est un modèle suivi par la plupart des projets Gradle comportant une bibliothèque, puis un exemple d'application utilisant cette bibliothèque.

 - module/
    - build.gradle
    - src/main/Java
 - library/
    - build.gradle
    - src/main/Java
 - settings.gradle
 - build.gradle

Dans ce settings.gradle de niveau supérieur, vous avez 

include ':library', ':module'

Et dans le module/build.gradle, vous compilez ce projet inclus

dependencies {
    compile project(':library')
}

Fondamentalement, le build.gradle de niveau supérieur est un wrapper pour toutes les configurations courantes des sous-projets et des variables. Par exemple, il est généralement utilisé dans une section repositories { } pour les URL Maven, par exemple. Tous les détails sur Gradle - Constructions multi-projets

Modules télécommandes

Ce qui précède convient parfaitement pour travailler localement, mais supposons que vous vouliez partager votre référentiel avec de nombreux autres développeurs sans leur demander de télécharger du code source supplémentaire. Ensuite, vous publieriez les autres bibliothèques sur un serveur distant. 

Si vos projets sont public sur GitHub, utilisez un service tel que jitpack.io . Vous pouvez également créer un compte sur Bintray OSS ou Maven Central pour que vos bibliothèques soient disponibles comme la plupart des autres. 

Si vos projets sont privés au sein de votre entreprise, vous aurez besoin d’un serveur de type Maven, qu’il s’agisse d’un serveur Web générique, de Nexus ou d’Artifactory, vous pouvez l’ajouter à un bloc supplémentaire au référentiel.

repositories {
    maven { url "http://some.maven.site/" }
}

Ajoutez ensuite les sources compile ou implementation, comme d'habitude

38
cricket_007

Enfin, Gradle 3.1 a résolu ce problème. Les builds composites sont maintenant supportés nativement. Plus ici . En bref, ajoutez cette ligne au fichier sandbox settings.gradle -

includeBuild '<PATH>/myLib'

Si vous ne pouvez pas mettre à niveau Gradle, votre seul espoir est de publier l'artefact mylib dans le dépôt maven local et d'ajouter mavenLocal () à sandbox/build.gradle.

4
darwinbaisa

Son discuté dans l'article https://blog.jetbrains.com/idea/2016/10/intellij-idea-2016-3-eap-gradle-composite-builds-and-Android-studio-2-2/

Fondamentalement, vous devez utiliser des versions composites. Ainsi, Vue> Fenêtres d’outils> Gradient> Cliquez avec le bouton droit sur le projet à l’aide de la bibliothèque> Configuration de construction composite> Cochez le projet de bibliothèque dont vous souhaitez utiliser la version locale.

Effectuez une reconstruction, puis utilisez la dépendance locale.

0
Richard Tingle