2014-03-26 2 views
1

최근 스프링 프레임 워크 내에서 Spring MVC (버전 4.0.2.RELEASE) 모듈의 소스 코드를 다운로드했다. 내 의도는 실제 .jar 파일 대신 모듈의 실제 소스 코드에 대해 실행하는 것입니다. (긴 이야기, 테스트 목적으로 만).Spring은 Java 8 클래스를 어떻게 사용하지만 Java 7에서도 실행됩니까?

소스 코드를 다운로드 한 후 내 프로젝트에서 jar 파일을 제거하고 컴파일하여 서버에 배포했습니다. 내가 디스패처 서블릿에 의해 처리 URL 중 하나를 칠 때 나는 오류되게되었습니다

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#0': Invocation of init method failed; nested exception is java.lang.Error: Unresolved compilation problems: 
    The import java.time cannot be resolved 
    The method toZoneId() is undefined for the type TimeZone 
    ZoneId cannot be resolved 

몇 가지 조사 후 소스 코드로 파고 I 오류에 언급 된 클래스는 JDK/JRE 1.8의 일부입니다 실현 . .jar 파일을 제거하기 전에 JDK/JRE 1.7에서 내 프로젝트가 문제없이 실행되었습니다.

제 질문은 스프링이 JDK 1.8의 클래스를 어떻게 포함하지만 JDK/JRE 1.7에서 계속 실행되도록 관리합니까? Spring의 .jar 파일을 사용할 때 예외가 throw되지 않는 이유는 무엇입니까?하지만 소스를 제공하고 jar 파일이 누락되면 예외가 발생합니다. 제목 질문에

전체 스택 추적

Mar 26, 2014 7:27:18 AM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Allocate exception for servlet dispatcher 
java.lang.Error: Unresolved compilation problems: 
    The import java.time cannot be resolved 
    The method toZoneId() is undefined for the type TimeZone 
    ZoneId cannot be resolved 

    at org.springframework.web.servlet.mvc.method.annotation.ServletRequestMethodArgumentResolver.<init>(ServletRequestMethodArgumentResolver.java:23) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.getDefaultArgumentResolvers(RequestMappingHandlerAdapter.java:522) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.afterPropertiesSet(RequestMappingHandlerAdapter.java:485) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:700) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482) 
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:624) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:672) 
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:543) 
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484) 
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:160) 
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1274) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1186) 
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:858) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:136) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:744) 
+0

전체 스택 추적을 게시 할 수 있습니까? 그 계급에는 그 수입품이없는 것 같습니다. –

+0

@SotiriosDelimanolis 클래스는'ServletRequestMethodArgumentResolver'이며, stacktrace를 게시 할 것입니다. –

답변

5

대답은 : 봄은 자바 8 빌드하지만, 자바 (7) (6)와 호환됩니다.

ServletRequestMethodArgumentResolver을 가져 오지만, Java 8이 클래스 경로에 있지 않으면 인스턴스화되지 않는 중첩 된 클래스의 해당 클래스 만 참조합니다. 스프링 소스 코드에는 이와 같은 많은 예제가 있습니다 (예 : Java 5를 지원하기 시작한 이래로 항상 그렇습니다).

+0

Java 8로 코드를 컴파일해야합니까? –

+0

예, 분명히 컴파일해야하는 경우입니다. 봄에서 나온 항아리에 무슨 문제가 있습니까? –

+0

나는 긴 이야기를 말했고 나는 이것을 용서하지 않는다! 기본적으로 스프링 프레임 워크가 안전한지 검사 해달라는 요청을 받고 있습니다. 그것에 대한 당신의 생각을 듣고 싶습니다. –