尝试部署war服务器时出现以下错误。
服务器tomcat版本:7.0.57 服务器java版本:1.7
在intellij中使用gradle工具(bootrepackage)创建了战争。在开发过程中,一切都可以在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'
}
答案 0 :(得分:0)
在您的初始问题中,您混合了至少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版本(参见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')
}
哪个应该给你一个可执行和可部署的战争。在部署到要使用的tomcat服务器时,tomcat jar不再位于类路径上。