简体   繁体   中英

Spring Boot Multi Module Gradle Build - Multiple “Fat Jars”

our spring-boot project looks like the following

project
|__ build.gradle
|__ settings.gradle
   |__ module_a
   |__ module_b
   |__ ...
|__ module_a
|__ module_b

module_a contains only the SpringApplication class and a file application.properties

Running ./gradlew build works fine, but the problem is, for every module (about 10) gradle generates a fat jar including all dependencies.

We want to only have one far jar (in module a)

buildscript {
    ext {
        springBootVersion = '1.2.0.RELEASE'
        springLoadedVersion = '1.2.0.RELEASE'
    }
    repositories {
        // NOTE: You should declare only repositories that you need here
        mavenCentral()
        maven { url "http://repo.spring.io/release" }
        maven { url "http://repo.spring.io/milestone" }
        maven { url "http://repo.spring.io/snapshot" }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath("org.springframework:springloaded:${springLoadedVersion}")
    }
}


allprojects {

    group = "example.group"
    version = "0.0.1"

    repositories() {
        mavenCentral()
    }

}


subprojects {

    apply plugin: "groovy"
    apply plugin: "eclipse"

    eclipse {
        classpath {
            containers.remove("org.eclipse.jdt.launching.JRE_CONTAINER")
            containers "org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"
        }
    }

    apply plugin: "idea"
    apply plugin: "java"
    apply plugin: "spring-boot"

    mainClassName = "MainClassName"

    sourceCompatibility = 1.8
    targetCompatibility = 1.8

    dependencies {
    }
}

task wrapper(type: Wrapper) { gradleVersion = '2.2' }

We tried adding the options jar.enabled = false bootRepackage.enabled = false

in the subprojects section, but after that, the project wont comile any longer.

Rather than applying the Spring Boot plugin to every sub-project, you could apply it only to module_a :

project(':module_a') {
    apply plugin: 'org.springframework.boot'
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM