I have an spring boot gradle project etl
with a dependency of common core classes in another project named common
.
common/build.gradle
plugins {
id 'net.ltgt.apt' version '0.21'
id 'org.springframework.boot'
id 'io.spring.dependency-management'
id "io.freefair.lombok" version "5.1.0"
id 'java'
id 'idea'
id 'eclipse'
}
group = 'com.intelease'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
jcenter()
mavenCentral()
maven {
name "lightbend-maven-release"
url "https://repo.lightbend.com/lightbend/maven-releases"
}
maven {
name "Sonatype Snapshots"
url "https://oss.sonatype.org/content/repositories/snapshots/"
}
ivy {
name "lightbend-ivy-release"
url "https://repo.lightbend.com/lightbend/ivy-releases"
layout "ivy"
}
}
dependencies {
implementation 'com.typesafe.play:play-java_2.13:2.7.3'
implementation 'com.typesafe.akka:akka-actor-typed_2.13:2.5.23'
implementation "com.typesafe.play:play-guice_2.12:2.6.15"
implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb-reactive'
implementation 'org.neo4j.driver:neo4j-java-driver:1.7.5'
implementation 'org.apache.poi:poi-ooxml:3.17'
implementation 'com.google.maps:google-maps-services:0.13.0'
implementation 'org.apache.commons:commons-text:1.8'
implementation 'com.google.cloud:google-cloud-language:1.19.0'
implementation 'com.google.cloud:google-cloud-vision:1.19.0'
implementation 'technology.tabula:tabula:1.0.2'
implementation 'com.amazonaws:aws-java-sdk:1.11.618'
implementation 'edu.stanford.nlp:stanford-corenlp:3.8.0'
implementation 'nz.ac.waikato.cms.weka:weka-stable:3.8.4'
// https://mvnrepository.com/artifact/com.typesafe.play/play-java
implementation 'org.joda:joda-money:0.11'
implementation 'com.feth:play-easymail_2.12:0.9.0'
implementation 'com.feth:play-authenticate_2.12:0.9.0'
implementation 'org.apache.commons:commons-imaging:1.0-alpha1'
implementation 'com.github.cloudyrock.mongock:mongock-core:3.3.2'
implementation 'com.github.cloudyrock.mongock:mongock-spring:3.3.2'
implementation 'net.logstash.logback:logstash-logback-encoder:5.3'
implementation 'ch.qos.logback:logback-core:1.2.3'
implementation 'ch.qos.logback:logback-classic:1.2.3'
implementation 'com.google.firebase:firebase-admin:6.13.0'
implementation 'org.mapstruct:mapstruct:1.3.1.Final'
implementation 'org.jgrapht:jgrapht-core:1.4.0'
implementation 'org.jgrapht:jgrapht-io:1.4.0'
implementation 'commons-io:commons-io:2.6'
implementation 'org.springframework.guice:spring-guice:1.1.4.RELEASE'
implementation 'com.google.inject:guice:4.2.3'
implementation 'commons-collections:commons-collections:3.2.2'
implementation 'org.aspectj:aspectjrt:1.9.5'
implementation 'org.ghost4j:ghost4j:1.0.1'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.3.1.Final'
testAnnotationProcessor 'org.mapstruct:mapstruct-processor:1.3.1.Final' // if you are using mapstruct in test code
testImplementation 'io.projectreactor:reactor-test:3.3.0.RELEASE'
testImplementation 'org.springframework.boot:spring-boot-starter-test:2.2.0.RELEASE'
testImplementation 'cloud.localstack:localstack-utils:0.1.22'
testImplementation 'nl.jqno.equalsverifier:equalsverifier:3.3'
testImplementation 'net.aichler:jupiter-interface:0.8.3'
testImplementation 'org.mockito:mockito-junit-jupiter:3.0.0'
testImplementation 'org.assertj:assertj-core:3.13.2'
testImplementation 'org.junit.jupiter:junit-jupiter-params:5.5.2'
}
etl/settings.gradle:
rootProject.name = 'etl'
includeFlat ('common')
etl/build.gradle:
plugins {
id 'org.springframework.boot' version '2.2.7.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'eclipse'
id 'idea'
id 'java'
}
group = 'com.intelease'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
jcenter()
maven {
name "lightbend-maven-release"
url "https://repo.lightbend.com/lightbend/maven-releases"
}
ivy {
name "lightbend-ivy-release"
url "https://repo.lightbend.com/lightbend/ivy-releases"
layout "ivy"
}
}
ext {
set('springCloudVersion', "Hoxton.SR4")
}
dependencies {
implementation project(':common')
implementation 'org.apache.kafka:kafka-streams'
implementation 'io.debezium:debezium-core:1.1.1.Final'
implementation 'org.springframework.cloud:spring-cloud-stream'
implementation 'org.springframework.cloud:spring-cloud-stream-binder-kafka-streams'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
testImplementation 'org.springframework.cloud:spring-cloud-stream-test-support'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
test {
useJUnitPlatform()
}
The etl
project and common
project are just side by side in the same level in file system.
The problem is that whenever I try to build the etl
project which is dependent on common
, It shows some problem regarding classes that I've expected to be brought and available from common
project.
I've included the common
into settings.gradle
inside etl
project with using includeFlat
and Couldn't trace any issue with regard gradle multi module inclusion mechanisms.
Whats wrong with this flat multi module ecosystem?
the build script is ./gradlew clean build
in the etl folder.
The problem was because of spring boot plugin being present in both etl
and common
projects. so I found out that in the cammon/build.gradle
I have to add this piece of code:
...
bootJar {
enabled = false
}
jar {
enabled = true
}
...