部署到GAE时,Spring Boot会导致WebAppContext错误

时间:2018-04-28 19:03:34

标签: spring google-app-engine spring-boot spring-boot-maven-plugin spring-boot-gradle-plugin

我正在为个人项目构建REST API,使用Spring Boot执行此操作,并部署到Google App Engine上。该项目在本地编译和运行没有任何问题,我可以部署到GAE,没有构建错误。 但是,当我在部署到GAE后导航到我的URI时,会抛出404,并显示以下消息:

No context on this server matched or handled this request.
Contexts known to this server are:
/ ---> o.e.j.w.WebAppContext@56ef9176{/,file:///var/lib/jetty/webapps/root/,UNAVAILABLE}{/root.war} [failed]

我有一个build.gradle和pom.xml文件,并且必须在两者中声明依赖项,我认为这是问题。

我的pom.xml包含:

<dependencyManagement>
  <dependencies>
    <dependency>
      <!-- Import dependency management from Spring Boot -->
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-dependencies</artifactId>
      <version>2.0.1.RELEASE</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
</dependencies>

我的build.gradle包含:

plugins {
  id 'org.springframework.boot' version '2.0.1.RELEASE'
}
apply plugin: 'io.spring.dependency-management'
dependencies {
  compile 'org.springframework.boot:spring-boot-starter-web'
}

当我从两者中删除两个spring boot依赖项时,错误消失。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

最终把它弄清楚了,但是对于遇到同样错误的其他人来说,这样做会有所不同。
正如我在文档中发现的那样:如果您使用 WAR 作为可部署(而不是.jar文件),那么您还必须导入spring-boot-starter-tomcat作为提供的依赖项。< / p>

我的pom.xml现在看起来像:

<dependencyManagement>
  <dependencies>
    <dependency>
      <!-- Import dependency management from Spring Boot -->
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-dependencies</artifactId>
      <version>2.0.1.RELEASE</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
  </dependency>
</dependencies>

我的build.gradle现在看起来像:

plugins {
  id 'org.springframework.boot' version '2.0.1.RELEASE'
}
apply plugin: 'io.spring.dependency-management'
dependencies {
  compile 'org.springframework.boot:spring-boot-starter-web'
  providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
}