我尝试在独立的Tomcat 7.0.91上部署Gradle + Spring Boot 2 + Angular2应用程序WAR文件。 如果我使用提供的jar和嵌入式tomcat引导应用程序,一切正常,但是当我在“ / springboot”上下文中在独立容器上进行部署时,它会显示404:“原始服务器找不到目标资源的当前表示形式,或者不愿意透露一个人的存在。”来自tomcat的日志并不能说明任何有用的信息。 我通过设置server.xml上下文路径和doc base尝试了两种部署方法:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="/springboot" docBase="/home/user/SideProjects/springboot-angular2-gradle-war/build/libs"/>
</Host>
第二个是“手动”在webapps目录中部署战争文件。
我不确定,但是tomcat中的context.xml文件被设置为监视WEB-INF / web.xml中的资源,但是据我所知,spring boot不再使用web.xml了,也许是这样吗?不幸的是,我发现的每个教程都没有告诉我有关更改context.xml的任何信息,此外,我现在找不到在春季将什么资源视为部署描述符。
那是我的build.gradle文件:
buildscript {
ext {
springBootVersion = '2.0.5.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'war'
apply plugin: 'application'
mainClassName = "com.demo.SpringbootAngular2GradleWarApplication"
group = 'com.demo'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
war {
baseName = "demo-spring"
}
repositories {
mavenCentral()
}
configurations {
providedRuntime
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-web')
providedRuntime('org.springframework.boot:spring-boot-starter-tomcat')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
def frontendDir = "$projectDir/src/main/frontend"
def frontDistDir = "$frontendDir/dist"
sourceSets {
main {
resources {
srcDirs = ["$frontDistDir", "$projectDir/src/main/resources"]
}
}
}
clean.doFirst {
delete "$frontDistDir"
println "$frontDistDir - cleaned"
}
task buildAngular(type: Exec) {
workingDir "$frontendDir"
inputs.dir "$frontendDir"
commandLine "npm", "run-script", "build"
}
processResources.dependsOn "buildAngular"
主类扩展了servlet初始化程序:
package com.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class SpringbootAngular2GradleWarApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SpringbootAngular2GradleWarApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(SpringbootAngular2GradleWarApplication.class, args);
}
}
答案 0 :(得分:0)
问题是版本不兼容,为了支持el-api等,SpringBoot-2支持的最低Tomcat版本是8.5.x。实际上是在Web应用程序中消除战争并“手动”将其重命名。