Баночка с пружинной загрузкой Gradle - PullRequest
0 голосов
/ 05 марта 2019

Я пытался создать банку с зависимостями, потому что я получал NoClassDefFoundError при запуске баночки с java -Dspring.config.location=myProperties -jar myJar, после долгих поисков я обнаружил, что могу добиться этого, используя следующее решение в блоке jar:

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

И все хорошо с этим, за исключением количества времени при создании банки (приблизительно 1 минута) и в соответствии с этим ответом: Gradle: создайте 'толстую банку' с зависимостями Spring Boot Мне не нужно создавать дополнительную задачу, достаточно с bootRepackage, но я получаю ошибку, которую я упомянул выше с bootRepackage, и я не понимаю, почему.

Это содержимое моего build.gradle, и я использую весеннюю загрузку 1.5.15:

/*
 * This file was generated by the Gradle 'init' task.
 */
buildscript {
    ext.springBootVersion = '1.5.15.RELEASE'
    ext.managementVersion = '1.0.6.RELEASE'
    ext.axis2Version = '1.7.9'
    repositories {
        mavenCentral()
        mavenLocal()

    }
    dependencies {
        classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
        //classpath "io.spring.gradle:dependency-management-plugin:${managementVersion}"
        //classpath "com.intershop.gradle.wsdl:wsdl-gradle-plugin:2.0.1"
    }
}

plugins {
    id 'java'
    id 'maven'
    id 'org.springframework.boot' version '1.5.15.RELEASE'
    id 'io.spring.dependency-management' version '1.0.6.RELEASE'

} 

configurations{
    implementation{
        exclude group: 'javax.servlet', module: 'servlet-api'
    }
}

dependencies {

    implementation "org.springframework.boot:spring-boot-starter:${springBootVersion}"
    implementation 'org.springframework.integration:spring-integration-mongodb'
    implementation 'org.springframework.integration:spring-integration-amqp'


    testImplementation "org.springframework.boot:spring-boot-starter-test:${springBootVersion}"
    testImplementation 'org.mockito:mockito-core:2.6.1'

    implementation 'org.apache.ws.commons.axiom:axiom-jaxb:1.2.20'    

    implementation('org.apache.axis2:axis2-kernel:1.7.9'){
        exclude group: 'javax.servlet', module: 'servlet-api'
        //The exclude above don't work
    }

    implementation "org.apache.axis2:axis2-kernel:${axis2Version}"

    implementation "org.apache.axis2:axis2-wsdl2code-maven-plugin:${axis2Version}"
    implementation "org.apache.axis2:axis2-transport-http:${axis2Version}"


}

wsdl {
    axis2 {
        genNameAxis2 {
           //someAxis2Tasks
        }
    }
}

wsdl2java {

    //someWsdlTasks   
}

wsdl2javaExt {
    cxfVersion = "3.2.1"
}

jar {
    manifest{
        attributes ('Main-Class': 'dummy.Application')
    }

    from{
        configurations.runtimeClasspath.collect {it.isDirectory() ? it : zipTree(it)}
    }
    archiveBaseName = 'projectName'
    archiveVersion = '1.0.0'
}

bootRepackage{
    mainClass = 'dummy.Application'
    //classifier = 'boot' I'm getting an error with this argument
}

repositories {
    mavenLocal()    
}


group = 'dummy.group'
version = '1.0.0-SNAPSHOT'
sourceCompatibility = '1.8'
targetCompatibility = '1.8'

Заранее спасибо.

1 Ответ

0 голосов
/ 03 июля 2019

У меня возникла такая же проблема после обновления до Gradle 5 и использования «реализации» вместо «компиляции» для моих зависимостей.

Gradle построил основной jar без jar-ов подпроекта или зависимостей (без BOOT-Каталог INF / lib вообще).Изменение «реализации» обратно на «компиляция» в родительском проекте только исправило проблему (без других изменений).

Таким образом, очевидно, что плагин Spring Boot 1.5.9 Gradle не работает с новой конфигурацией реализации,Обратите внимание, что Spring Boot 2 и новая задача bootJar работают нормально, эта проблема связана только со старым bootRepackage и новой конфигурацией реализации.

...