Gradle Multi-Module De Configuration De Projet

J'ai récemment commencé à utiliser Gradle et remplacement de mon Maven projets. J'ai eu beaucoup de problèmes dans le passé avec la gestion de la multi-module construit avec Maven. Gradle a été une bouffée d'air frais lors de la manipulation multi-module buils, mais il n'est pas encore parfait.

J'ai le dossier suivant de mise en page de mes projets:

-- Projects
---- EnterpriseApp1
------ EarProject
-------- build.gradle
------ EjbProject
-------- build.gradle
------ WarProject
-------- build.gradle
------ properties.gradle
------ build.gradle
---- CommonLib
------ build.gradle
---- ClientApplication
------ build.gradle

Le problème que j'ai, c'est que le "EnterpriseApp1" et "ClientApplication" les deux dépendent de la CommonLib projet. Je ne sais pas comment configurer mon "EnterpriseApp1" build fichier à utiliser le CommonLib projet en tant que dépendance de l' "EjbProject". Je suis venu très près d'obtenir que cela fonctionne, mais pas tout à fait encore. J'ai eu du succès en copiant le CommonLib dossier à l'intérieur "EnterpriseApp1", mais ce n'est pas une solution à long terme.

Voici mon propriétés actuelles.gradle fichier dans "EnterpriseApp1":

include "EarProject", "EjbProject", "WarProject"
includeFlat "CommonLib"

Selon la Gradle la documentation de la "includeFlat de la commande" dans les "paramètres".gradle" fichier comprendra des projets dans le même levier que le dossier où les "paramètres".gradle" fichier (comportement souhaité).

EnterpriseApp1/build.gradle fichier:

subprojects {
   apply plugin: 'java'

   sourceCompatibility  = 1.6
   group = 'org.example'
   version = '1.0-SNAPSHOT'

   repositories {
      mavenCentral()
      ...
   }

   dependencies {

   }    
}

EnterpriseApp1/EjbProject/build.gradle:

apply plugin: 'java'

sourceCompatibility  = 1.6

repositories {
   mavenCentral()
   ...
}

dependencies {
   compile project(':CommonLib')

   compile group: 'org.restlet.jee', name: 'org.restlet', version: '2.0.11'
   compile group: 'ma.glasnost.orika', name: 'orika-core', version: '1.0'
   ...
   compile group: 'javax.jmdns', name: 'jmdns', version: '3.4.1'
}

Quand j'execute "gradle construction propre" de la EnterpriseApp1 dossier toutes les dépendances sont téléchargés comme prévu et les projets commencent à compiler (y compris les CommonLib projet), mais le EjbProject projet échoue lors de la compilation en raison du fait qu'il en manque la CommonLib pot de référence. Gradle est pas assez intelligent (ou je suis complètement paumé ;)) pour configurer mon EjbProject à utiliser le Pot généré à partir de la CommonLib projet de construction de stade.

Je m'excuse pour la longue et complexe de l'installation. Je travaille à essayer de comprendre cela pour un certain temps maintenant, mais ont presque manqué d'idées. Je voudrais vraiment apprécier toute l'aide pour la communauté.

Merci!

  • Quelque chose ne va pas avec le retrait de la disposition des répertoires indiqués. Est-ce une construction, où CommonLib et ClientApplication sont sur le même niveau de répertoire que EnterpriseApp1, et les autres projets sont à un niveau bas? (Ce qui serait très rare de mise en page. Habituellement, c'est un ou l'autre.)
  • Aussi, comment doit-Gradle sais que CommonLib est une dépendance de EjbProject, étant donné que vous ne spécifiez pas cette dépendance dans EjbProject/build.gradle?
  • Avez-vous l'intention de dire: Voici mes réglages actuels.gradle fichier dans "EnterpriseApp1"
  • Où en est le projet :angel-display-proxy viennent?
  • Est ClientApplication séparé de construire ou d'une partie de la EnterpriseApp1 construire?
  • Pierre, merci d'avoir pris le temps de commenter sur mon problème! Je vous remercie de votre temps. Vous avez raison, j'ai fait une erreur dans le répertoire de mise en page. J'ai corrigé le problème
  • Je sais que la structure n'est pas commun, mais c'est la seule façon que je peux penser de le faire. Le EnterpriseApp1 est une OREILLE qui a un EJB qui dépend de la DTO des POJO déclarations dans le CommonLib projet. J'ai alors d'un SWING de l'application client (JAR) qui héberge un RESTE de servlet (avec Restlet) qui utilise la DTO des POJO déclarations dans le CommonLib bibliothèque (JAR) pour sérialiser/désérialiser des données par le REPOS.
  • Quand j'ai écrit ce que je me suis converti beaucoup de noms des applications à l'un des noms génériques. J'ai malencontreusement oublié de convertir "ange-affichage-proxy" à "CommonLib". J'ai fait la modification. Merci pour la capture de la que les! Mon erreur pour la négligence et de l'écrire si tard dans la nuit 😉
  • Oui, ClientApplication est séparé de construire à partir de EnterpriseApp1. C'est un SWING ClientApp qui communique avec le EnterpriseApp1 (de l'OREILLE).

InformationsquelleAutor juan.villa | 2012-01-26