0

My project consists of multiple modules like core, my-backend, university, learning, etc. Core is module which is required in all rest modules. When I create build of my-backend module, I see core is being added with all dependencies in it which is making that jar too big. Seems some issue with my gradle file which is causing this problem. Also somehow application.yml from core module is not being loaded from my-backend module. Any Idea why? My gradle file is as follows:

buildscript {
    ext {
        springBootVersion = '2.2.1.RELEASE'
        internalUrl = 'http://internal/repository'
    }
    repositories {
        mavenLocal()
        maven { url "https://plugins.gradle.org/m2/" }
        maven { url "http://repo.spring.io/release" }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath 'org.asciidoctor:asciidoctor-gradle-plugin:1.5.3'
        classpath 'org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.15'
    }
}

plugins {
    id "io.freefair.lombok" version "3.8.4" apply false
    id 'org.springframework.boot' version '2.2.1.RELEASE'
    id 'io.spring.dependency-management' version '1.0.8.RELEASE'
}

subprojects {
    apply plugin: 'java'
    apply plugin: 'maven'
    apply plugin: 'application'

    apply from: "$rootDir/dependencies.gradle"

    mainClassName = "com.myk.MyApp"
    group = 'com'
    version = app.version

    description = """"""

    sourceCompatibility = 11
    targetCompatibility = 11

    ext {
        set('springCloudVersion', "Hoxton.RC1")
    }
    repositories {
        mavenLocal()
        maven { url "http://repo.spring.io/libs-snapshot" }
        jcenter()
        mavenCentral()
        maven { url "http://repo.maven.apache.org/maven2" }
        maven { url "http://maven.aksw.org/repository/internal" }
        maven { url "https://dl.bintray.com/michaelklishin/maven/" }
    }

    configurations {
        compileOnly {
            extendsFrom annotationProcessor
        }
    }

// additional plugins
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'

    apply plugin: "io.freefair.lombok"

    dependencies {

        implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
        implementation 'org.springframework.boot:spring-boot-starter-web'
        implementation 'org.springframework.boot:spring-boot-starter-security'
        implementation 'org.springframework.boot:spring-boot-starter-actuator'
        implementation 'org.springframework.boot:spring-boot-starter-jdbc'
        implementation 'org.springframework.boot:spring-boot-starter-mail'
        implementation 'org.springframework.boot:spring-boot-starter-aop'
        implementation 'org.springframework.boot:spring-boot-starter-integration'
        implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'

        testImplementation('org.springframework.boot:spring-boot-starter-test') {
            exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
        }
        testImplementation 'org.springframework.security:spring-security-test'
        testImplementation 'org.springframework.cloud:spring-cloud-stream-test-support'
        testImplementation (group: 'com.github.javafaker', name: 'javafaker', version: ver.'javafaker') {
            exclude group: 'org.yaml', module: 'snakeyaml'
        }
    }

    test {
        useJUnitPlatform()
    }

    dependencyManagement {
        imports {
            mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
        }
    }
}

project(':core') {
    dependencies {
        implementation group: 'com.github.fommil.netlib', name: 'all', version: '1.1.2' // weka dependency
        implementation 'org.springframework.boot:spring-boot-configuration-processor:2.2.1.RELEASE'
        implementation group: 'com.google.firebase', name: 'firebase-admin', version: ver.'firebase-admin'
        implementation group: 'com.google.apis', name: 'google-api-services-gmail', version: ver.'google-api-services-gmail'
        compile "org.quartz-scheduler:quartz:${ver.quartz}"
    }
}

[
        ':university',
        ':my-backend',
        ':learning'
].each {
    project(it) {
        apply plugin: 'org.springframework.boot'
        apply plugin: 'war'
        apply plugin: 'io.spring.dependency-management'

        mainClassName = "com.myk.MyApp"

        springBoot {
            buildInfo()
        }

        dependencies {
            compile project(':core')
            providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
            testCompile group: 'io.github.swagger2markup', name: 'swagger2markup', version: ver.'swagger2markup'
        }

    }
}
  • All your projects are spring boot projects, each will include everything it depends on. I doubt that is what you want, only the actual executable project should include the `spring-boot-plugin`. – M. Deinum Nov 11 '19 at 09:27
  • Thanks @M.Deinum. I have to keep spring boot plugin in Core project but I found following solution working with just enabling jar task for Core project. jar { enabled = true } https://stackoverflow.com/questions/49352837/spring-boot-2-gradle-plugin-without-executable-jar – Mayank Rupareliya Nov 11 '19 at 11:25

0 Answers0