java - modules - Gradle Multi-Module Project Setup
spring boot multi module gradle (1)
El diseño del directorio que ha elegido ya sugiere una buena solución. Sugiero tener tres compilaciones separadas: EnterpriseApp1
, CommonLib
y ClientApplication
. Publicaría CommonLib
en un repositorio de Maven o Ivy para que las otras dos compilaciones puedan consumirlo desde allí. Para el desarrollo local, puede publicar CommonLib
en el repositorio local de Maven (más fácil) o en un repositorio de Ivy basado en archivos.
Recientemente comencé a usar Gradle y reemplazar mis proyectos existentes basados en Maven. He tenido muchos problemas en el pasado con el manejo de construcciones de múltiples módulos con Maven. Gradle ha sido un soplo de aire fresco al manejar buils de múltiples módulos, pero aún no es perfecto.
Tengo el siguiente diseño de carpeta para mis proyectos:
-- Projects
---- EnterpriseApp1
------ EarProject
-------- build.gradle
------ EjbProject
-------- build.gradle
------ WarProject
-------- build.gradle
------ properties.gradle
------ build.gradle
---- CommonLib
------ build.gradle
---- ClientApplication
------ build.gradle
El problema que tengo es que "EnterpriseApp1" y "ClientApplication" dependen del proyecto CommonLib. No sé cómo configurar mi archivo de compilación "EnterpriseApp1" para usar el proyecto CommonLib como una dependencia para el "EjbProject". He estado muy cerca de hacer que esto funcione, pero todavía no del todo. He tenido éxito al copiar la carpeta CommonLib dentro de "EnterpriseApp1", pero eso no es una solución a largo plazo.
Aquí está mi archivo de properties.gradle actual en "EnterpriseApp1":
include "EarProject", "EjbProject", "WarProject"
includeFlat "CommonLib"
De acuerdo con la documentación de Gradle, el comando "includeFlat" en el archivo "settings.gradle" incluirá proyectos en la misma palanca que la carpeta donde se encuentra el archivo "settings.gradle" (comportamiento deseado).
Archivo EnterpriseApp1 / build.gradle:
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''
}
Cuando ejecuto "gradle clean build" desde la carpeta EnterpriseApp1, todas las dependencias se descargan como se esperaba y los proyectos comienzan a compilarse (incluido el proyecto CommonLib), pero el proyecto EjbProject falla durante la compilación debido a que falta la referencia del archivo CommonLib. . Gradle no es lo suficientemente inteligente (o estoy completamente despistado;)) para configurar mi EjbProject para usar el Jar generado desde la etapa de compilación del proyecto CommonLib.
Pido disculpas por la larga y complicada configuración. He estado trabajando para tratar de resolver esto desde hace algún tiempo, pero casi me he quedado sin ideas. Realmente agradecería cualquier ayuda para la comunidad.
¡Gracias!