Вызывается: java.lang.NoSuchMethodError: org.apache.tomcat.util.res.StringManager.getManager (Ljava / lang / Class;) - PullRequest
0 голосов
/ 16 мая 2018

Получение приведенной ниже ошибки при попытке развернуть военный сервер.

Версия tomcat сервера: 7.0.57 версия java сервера: 1.7

война, созданная с помощью инструментов gradle (bootrepackage) в intellij.

Все работает найти в intellij во время разработки.

Вызывается: java.lang.NoSuchMethodError: org.apache.tomcat.util.res.StringManager.getManager (Ljava / lang / Class;) Lorg / apache / tomcat / util / res / StringManager;

build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
   dependencies {
       classpath("org.springframework.boot:spring-boot-gradle-plugin:1.1.10.RELEASE")
    }
}
group 'batch'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'spring-boot'
apply plugin: 'war'

bootRun {
    addResources = true
}

war {
    baseName = 'Batch'
    version =  '0.1.0'
    manifest {
        attributes 'Main-Class': 'src.main.java.com.Application'
    }
}

jar {
    manifest {
        attributes 'Main-Class': 'src.main.java.com.Application'
    }
}

sourceCompatibility = 1.7
targetCompatibility = 1.7

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '1.1.10.RELEASE'
    compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.24'
    compile group: 'org.json', name: 'json', version: '20180130'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '1.1.10.RELEASE'
    compile group: 'javax.servlet', name: 'jstl', version: '1.2'
    compile group: 'org.apache.tomcat.embed', name: 'tomcat-embed-jasper', version: '7.0.82'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-tomcat', version: '1.1.10.RELEASE'
    //compile group: 'net.sourceforge.tess4j', name: 'tess4j', version: '4.0.2'
    //compile group: 'org.apache.poi', name: 'poi', version: '3.9'
}

1 Ответ

0 голосов
/ 17 мая 2018

В своем первоначальном вопросе вы смешали как минимум 3 разные версии Spring Boot.1.1.10, 1.4.0 и 1.5.6.Никогда не смешивайте банки разных версий фреймворка (независимо от фреймворка), так как это приведет к интересным результатам.

Далее вы пытаетесь перехитрить плагин Spring Boot, самостоятельно управляя зависимостями.Пусть Spring Boot (и плагин), что они могут сделать для вас.

Судя по зависимости tomcat-jasper, вы пытаетесь использовать JSP с Spring Boot (хотя и не рекомендуется).

Сначала давайте исправим управление зависимостями и используемую версию Spring Boot.

ПРИМЕЧАНИЕ: Я использовал самую последнюю версию Spring Boot 1.x, не стесняйтесь использовать немного более старую версию.

buildscript {
    repositories {
        mavenCentral()
    }
   dependencies {
       classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.13.RELEASE")
    }
}

group 'batch'
version '1.0-SNAPSHOT'

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

Далее давайте исправим версию tomcat, которую вы хотите использовать (см. , как использовать tomcat7 ).

ext['tomcat.version']='7.0.57'

Теперь очистите ваши зависимости, чтобы позволить весенней загрузке управлять зависимостями.Поскольку вы хотите создать архив WAR, ваша spring-boot-starter-tomcat, а также другие зависимости tomcat должны быть зависимостью providedRuntime (см. Файл войны с упаковкой ).

dependencies {
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-web'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa'
    providedRuntime group: 'org.springframework.boot', name: 'spring-boot-starter-tomcat'

    compile group: 'mysql', name: 'mysql-connector-java'
    compile group: 'org.json', name: 'json', version: '20180130'
    compile group: 'javax.servlet', name: 'jstl', version: '1.2'

    providedRuntime group:'org.apache.tomcat', name:'tomcat-juli', version:property('tomcat.version')
    providedRuntime group: 'org.apache.tomcat.embed', name: 'tomcat-embed-jasper', version: property('tomcat.version')
}

Вы также сможете удалить задачу jar, поскольку она контролируется (и отключается) Spring Boot.Возможно, вы захотите использовать раздел springBoot для настройки класса main.

Все это должно привести к более или менее следующему build.gradle.

buildscript {
    repositories {
        mavenCentral()
    }
   dependencies {
       classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.13.RELEASE")
    }
}
group 'batch'
version '1.0-SNAPSHOT'

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

sourceCompatibility = 1.7
targetCompatibility = 1.7

ext['tomcat.version']='7.0.57'

bootRun {
    addResources = true
}

springBoot {
  mainClass = com.Application
}

war {
    baseName = 'Batch'
    version =  '0.1.0'
}

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-web'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa'
    providedRuntime group: 'org.springframework.boot', name: 'spring-boot-starter-tomcat'

    compile group: 'mysql', name: 'mysql-connector-java'
    compile group: 'org.json', name: 'json', version: '20180130'
    compile group: 'javax.servlet', name: 'jstl', version: '1.2'

    providedRuntime group:'org.apache.tomcat', name:'tomcat-juli', version:property('tomcat.version')
    providedRuntime group: 'org.apache.tomcat.embed', name: 'tomcat-embed-jasper', version: property('tomcat.version')
}

Что должно дать вам войну, которая является одновременно исполняемой и развертываемой.При развертывании на сервере tomcat, который вы хотите использовать, банки tomcat больше не находятся на пути к классам.

...