简体   繁体   English

使用gradle 3和java 7的spring boot在服务器启动时失败

[英]spring boot with gradle 3 and java 7 fails at server startup

I have started playing with gradle and spring boot and picked some nice 'n easy tutorials as listed below. 我已经开始玩gradle和spring boot并选择了一些很好的'n easy tutorials,如下所示。 My setup is also listed below. 我的设置也列在下面。

Though the tutorial states that Java 1.8 is required, I have read that both gradle and boot can be used on Java 1.7 also. 虽然本教程指出需要Java 1.8,但我已经读过gradle和boot也可以在Java 1.7上使用。

So, any reason why this simple tutorial shouldn't work for Java 1.7? 那么,为什么这个简单的教程不适用于Java 1.7的任何原因? Apparently ... 显然......

I create my gradlew as follows: gradle wrapper --gradle-version 3.0 and then run my gradle build command as ususal: ./gradlew build && java -jar build/libs/gs-spring-boot-0.1.0.jar in my project directory. 我创建我的gradlew如下: gradle wrapper --gradle-version 3.0然后运行我的gradle build命令作为ususal: ./gradlew build && java -jar build/libs/gs-spring-boot-0.1.0.jar in my项目目录。

Setup: 建立:

build.gradle ( NOTE : I specify target/sourceCompatibility = 1.7): build.gradle( 注意 :我指定target / sourceCompatibility = 1.7):

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

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'

jar {
    baseName = 'gs-spring-boot'
    version =  '0.1.0'
}

repositories {
    mavenCentral()
}

sourceCompatibility = 1.7
targetCompatibility = 1.7

dependencies {
    // tag::jetty[]
    compile("org.springframework.boot:spring-boot-starter-web") {
        exclude module: "spring-boot-starter-tomcat"
    }
    compile("org.springframework.boot:spring-boot-starter-jetty")
    // end::jetty[]
    // tag::actuator[]
    compile("org.springframework.boot:spring-boot-starter-actuator")
    // end::actuator[]
    testCompile("junit:junit")
}

output: 输出:

Note that the error occurs at server startup, ie here: org.springframework.context.ApplicationContextException: Unable to start embedded container 请注意,错误发生在服务器启动时,即: org.springframework.context.ApplicationContextException: Unable to start embedded container

vagrant@precise32:/vagrant/BootTutorial$ ./gradlew build && java -jar build/libs/gs-spring-boot-0.1.0.jar
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:findMainClass
:jar
:bootRepackage
:assemble
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
:check UP-TO-DATE
:build

BUILD SUCCESSFUL

Total time: 4.835 secs

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.4.0.RELEASE)

2016-09-03 18:57:49.456  INFO 2043 --- [           main] hello.Application                        : Starting Application on precise32 with PID 2043 (/vagrant/BootTutorial/build/libs/gs-spring-boot-0.1.0.jar started by vagrant in /vagrant/BootTutorial)
2016-09-03 18:57:49.518  INFO 2043 --- [           main] hello.Application                        : No active profile set, falling back to default profiles: default
2016-09-03 18:57:50.136  INFO 2043 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@65b0e5: startup date [Sat Sep 03 18:57:50 AEST 2016]; root of context hierarchy
2016-09-03 18:57:58.795  WARN 2043 --- [           main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
2016-09-03 18:57:59.019 ERROR 2043 --- [           main] o.s.boot.SpringApplication               : Application startup failed

org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:137) ~[spring-boot-1.4.0.RELEASE.jar!/:1.4.0.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:535) ~[spring-context-4.3.2.RELEASE.jar!/:4.3.2.RELEASE]
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.4.0.RELEASE.jar!/:1.4.0.RELEASE]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) [spring-boot-1.4.0.RELEASE.jar!/:1.4.0.RELEASE]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:369) [spring-boot-1.4.0.RELEASE.jar!/:1.4.0.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:313) [spring-boot-1.4.0.RELEASE.jar!/:1.4.0.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1185) [spring-boot-1.4.0.RELEASE.jar!/:1.4.0.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1174) [spring-boot-1.4.0.RELEASE.jar!/:1.4.0.RELEASE]
        at hello.Application.main(Application.java:13) [classes!/:na]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_80]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_80]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_80]
        at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_80]
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) [gs-spring-boot-0.1.0.jar:na]
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) [gs-spring-boot-0.1.0.jar:na]
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) [gs-spring-boot-0.1.0.jar:na]
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:58) [gs-spring-boot-0.1.0.jar:na]
Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:189) ~[spring-boot-1.4.0.RELEASE.jar!/:1.4.0.RELEASE]
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:162) ~[spring-boot-1.4.0.RELEASE.jar!/:1.4.0.RELEASE]
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:134) ~[spring-boot-1.4.0.RELEASE.jar!/:1.4.0.RELEASE]
        ... 16 common frames omitted

vagrant@precise32:/vagrant/BootTutorial$

With Spring Boot 1.4, the default Jetty version is 9.3, which requires JDK8. 使用Spring Boot 1.4,默认的Jetty版本是9.3,这需要JDK8。

If you want to stick to JDK7, you can use Jetty 9.2 as explained in the reference documentation . 如果您想坚持使用JDK7, 可以使用Jetty 9.2,如参考文档中所述

Did you actually look at the stack? 你真的看过堆栈吗? It clearly says "Port 8080 in use". 它清楚地说“正在使用8080端口”。 There are two possibilities, either you have some kind of server or service listening to port 8080 or you have a hanging thread in the background from your last run. 有两种可能性,要么您有某种服务器或服务侦听端口8080,要么您在上次运行的后台有一个挂起的线程。

I'm not sure how your Application.java class looks like.But I'm guessing you are missing something like this. 我不确定你的Application.java类是怎么样的。但我猜你错过了这样的东西。

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
  public static void main(String[] args) {
    SpringApplication.run(YourClassToRun.class, args);
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM