gpt4 book ai didi

spring-boot - 引起原因:java.lang.NoSuchMethodError:org.apache.tomcat.util.res.StringManager.getManager(Ljava/lang/Class;)

转载 作者:行者123 更新时间:2023-12-03 04:21:23 33 4
gpt4 key购买 nike

尝试部署War Server时出现以下错误。

服务器Tomcat版本:7.0.57
服务器Java版本:1.7

使用intellij中的gradle工具(bootrepackage)创建的 war 。

开发过程中一切都可以在intellij中找到。

Caused by: 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'
}

最佳答案

在最初的问题中,您至少混合了3种不同版本的Spring Boot。 1.1.10、1.4.0和1.5.6。切勿混用框架不同版本的jar(无论框架如何),因为这会导致有趣的结果。

接下来,您将尝试通过自己管理依赖项来超越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版本(请参阅 how to use tomcat7)。
ext['tomcat.version']='7.0.57'

现在清理您的依赖关系,以便让spring boot管理依赖关系。当您要构建WAR归档文件时,您的 spring-boot-starter-tomcat以及其他tomcat依赖项应该是 providedRuntime范围内的依赖项(请参见 Packaging war file)。
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')
}

这应该给您带来一场既可执行又可部署的 war 。部署到要使用的tomcat服务器时,tomcat jar不再位于类路径中。

关于spring-boot - 引起原因:java.lang.NoSuchMethodError:org.apache.tomcat.util.res.StringManager.getManager(Ljava/lang/Class;),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50370908/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com