Spring Boot插件不会在jar中添加lib文件夹

时间:2018-03-28 21:48:18

标签: spring-boot gradle jar

我有以下 build.gradle

group 'as'
version '1.0'

buildscript {
    ext {
        springVersion = '5.0.4.RELEASE'
        springBootVersion = '1.5.6.RELEASE'
        springJPAVersion = '2.0.5.RELEASE'
        javaxVersion = '1.0.2'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'org.springframework.boot'

jar {
    baseName = 'reports'
    version =  '0.0.1'

    manifest {
        attributes 'Implementation-Title': baseName,
                'Implementation-Version': version
    }

    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

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

dependencies {
    implementation "org.springframework.boot:spring-boot-starter-web:${springBootVersion}"
    implementation "org.springframework.boot:spring-boot-starter-data-jpa:${springBootVersion}"
    implementation "org.springframework.data:spring-data-jpa:${springJPAVersion}"
    implementation "javax.persistence:persistence-api:${javaxVersion}"
    implementation "mysql:mysql-connector-java:5.1.43"

    testImplementation group: 'junit', name: 'junit', version: '4.11'
}

gradle创建了具有以下结构的jar:

  • BOOT-INF
  • META-INF
  • 组织

但似乎结构必须如下:

  • BOOT-INF
    • LIB
  • META-INF
  • 组织

包含lib文件夹,其中包含依赖项,因为现在启动后我收到错误:

  

例外......

     

引起:java.lang.NoClassDefFoundError:   com.as.reports.Application.main上的org / springframework / boot / SpringApplication(Application.java:12)

1 个答案:

答案 0 :(得分:1)

因此,我知道这个答案可能为时已晚,无法为您提供帮助,但是我在尝试解决完全相同的问题时偶然发现了这个问题,并想起了this

经过半天的反复试验,我找到了解决方案,所以希望我可以省去别人寻找这个未解决问题的痛苦。

问题在于在依赖项中使用implementation关键字。 1.x Spring Boot Gradle插件未出现,该关键字识别为重新包装胖子罐所需的依赖项。如果将其改回较旧的compile关键字,则应获得必要的lib文件夹。