鍍金池/ 問答/Java  Scala/ springBoot2.0 gradle 多模塊項(xiàng)目打包問題。

springBoot2.0 gradle 多模塊項(xiàng)目打包問題。

項(xiàng)目是用springBoot+gradle生成的,后來改成了多模塊,結(jié)果打包的時(shí)候報(bào)錯(cuò):The value of a manifest attribute must not be null (Key=Start-Class)
這個(gè)start-class應(yīng)該就是springboot啟動(dòng)的application類,不知道是不是因?yàn)槲腋某闪硕嗄K項(xiàng)目,gradle配置文件沒寫好,所以導(dǎo)致拿不到start-class。

以下是build.gradle文件(springboot版本原本是2.0.0 M7,后來改成了2.0.1.BUILD-SNAPSHOT):

apply from: "./libraries.gradle"

buildscript {
    ext {
        springBootVersion = '2.0.1.BUILD-SNAPSHOT'
        mybatisGeneratorVersion = '1.4'
    }
    repositories {
        mavenCentral()
        maven { url "https://repo.spring.io/snapshot" }
        maven { url "https://repo.spring.io/milestone" }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

/*group = 'com.psy'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8*/

/*repositories {
    mavenCentral()
    maven { url "https://repo.spring.io/snapshot" }
    maven { url "https://repo.spring.io/milestone" }
}*/

//configuration for all projects
allprojects {
    apply plugin: 'java'
    group 'com.psy'
    version = '0.0.1-SNAPSHOT'
    sourceCompatibility = 1.8
    targetCompatibility = 1.8

    repositories {
        mavenCentral()
        maven { url "https://repo.spring.io/snapshot" }
        maven { url "https://repo.spring.io/milestone" }
    }

    /*jar {
        enabled = true
        baseName = 'psy'
        version = '0.5.0'
        manifest {
            attributes "Manifest-Version": 1.0,
                       'Main-Class': 'org.springframework.boot.loader.JarLauncher',
                    'Start-Class': 'com.psy.metrics.MetricsApplication'
        }
    }*/

    /*bootJar {
        classifier = 'app'
        baseName = 'psy'
        version = '0.5.0'
        manifest {
            attributes "Manifest-Version": 1.0,
                        'Main-Class': 'org.springframework.boot.loader.JarLauncher',
                    'Start-Class': 'com.psy.metrics.MetricsApplication'
        }
    }*/
}

//find out the java projects
ext.javaProjects = subprojects.findAll { project -> project.name != 'docs' && project.name != 'manual' && project.name != 'guides'}

project("web") {
    description = "The web module of metrics project"

    dependencies {
        compile(project(":service"))
        compile(project(":common"))
        compile(libraries.shiro_spring)
        compile(libraries.shiro_redis)
        compile(libraries.spring_boot_redis)
        compile(libraries.spring_boot_starter_actuator)
        compile(libraries.spring_boot_starter)
        compile(libraries.spring_boot_starter_web)
        testCompile(libraries.spring_boot_starter_test)
    }
}

project("dao") {
    description = "The dao module of metrics project"

    dependencies {
        compile(project(":common"))
        compile(libraries.mysql_connector_java)
    }
}

project("service") {
    description = "The service module of metrics project"

    dependencies {
        compile(project(":common"))
        compile(project(":dao"))
    }
}

project("common") {
    description = "The common module of metrics project"

    dependencies {
        compile(libraries.lombok)
        compile(libraries.orika_core)
        compile(libraries.spring_boot_redis)
        compile(libraries.spring_boot_starter)
        compile(libraries.commons_lang3)
        compile(libraries.guava)
        compile(libraries.javax_validation)
        compile(libraries.poi)
        compile(libraries.poi_ooxml)
        compile(libraries.commons_beanutils)
    }
}

settings.gradle:
rootProject.name = 'metrics'
include 'web'
include 'service'
include 'dao'
include 'common'

報(bào)錯(cuò)信息:

clipboard.png

有試過在build.gradle里面覆蓋bootJar的命令,把start-class強(qiáng)行寫上去,雖然能生成jar包,但是并不完整。

求大神們指出一下是哪里出了問題,需要怎么改,萬分感謝T T

回答
編輯回答
笑忘初

問題解決了,最根本的原因還是build.gradle構(gòu)建部分的配置放在了根目錄下,沒放在啟動(dòng)類所在的模塊下,打包bootJar時(shí)提示找不到啟動(dòng)類。
另外就算強(qiáng)行把啟動(dòng)類的包名.類名寫在start-class上,因?yàn)閷?shí)際上并沒有找到這個(gè)啟動(dòng)類,所以打出來的包是殘缺的。
只要在啟動(dòng)類所在的模塊增加一個(gè)build.gradle,并把構(gòu)建部分的配置移過去,就可以正常打包了。
問題解決有賴于:https://my.oschina.net/tangdu...

2018年5月11日 20:26