디버그 할 수있는 방법 springboot 항아리, 바람둥이 방법에 전쟁을 배포

원본 링크 : https://dan326714.iteye.com/blog/2400168

공식 링크 : HTTP : //docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-create-a-deployable-war-file

 

이 회사는 Springboot를 사용하여 개발,하지만 우리는 여전히 전쟁 패키지로 분류 않는 이유, 그것은 때문에, 자동으로 아래의 해당 바람둥이에 배포 할 마스터 병합에 코드만큼, 후크를 수행 우리 회사의 운영 및 유지 보수입니다, 그래서 우리는 전쟁과 기업이 가방 배포 프로젝트,하지만 바람둥이는 매우 완전한 서블릿 컨테이너입니다.

 

전쟁 패키지를 재생하는 정보의 공식 웹 사이트는 말한다 방법을 살펴 보자

배포 가능한 war 파일을 생성하는 첫 번째 단계는 제공하는  SpringBootServletInitializer 서브 클래스를하고 무시  configure 방법. 이 스프링 프레임 워크의 서블릿 3.0 기능을 사용합니다 그리고 그것은 서블릿 컨테이너에 의해 시작 때 응용 프로그램을 구성 할 수 있습니다. 일반적으로 확장하는 응용 프로그램의 메인 클래스를 업데이트  SpringBootServletInitializer:

 

자바 코드   컬렉션 코드
@SpringBootApplication  
 공공  클래스 응용 프로그램 확장 SpringBootServletInitializer {   
  
    @Override가   
    보호 SpringApplicationBuilder의 구성 (SpringApplicationBuilder 응용 프로그램) {  
         반환 (. 응용 프로그램 application.sources 클래스 );  
    }   
  
    공공  정적  무효 메인 (문자열 [] 인수)이 발생 예외 {   
        SpringApplication.run (. 애플리케이션 클래스 , 인수)를;  
    }   
  
}  

 

 

 

첫 번째 단계는, 그래서 아마 구성하고 메소드를 구현, 당신은 당신의 메인 클래스에 SpringBootServletInitializer을 상속하는 것을 의미합니다, 많은 balaba.

 

다음 단계는 프로젝트가 전쟁 파일이 아닌 jar 파일을 생성하도록 빌드 구성을 업데이트하는 것입니다. 당신은 메이븐을 사용하고 사용하는 경우  spring-boot-starter-parent (당신을 위해 Maven의 전쟁 플러그인을 구성하는) 당신이 할 필요가 수정하는 것입니다  pom.xml 전쟁 포장을 변경 :

 

<포장> 전쟁 </ 포장>

 

 

당신의 pom.xml을 받는다는하게됩니다 두 번째 단계는 패키지의 전쟁으로 포장됩니다.

 

과정의 마지막 단계는 임베디드 서블릿 컨테이너는 war 파일이 배포 될 수있는 서블릿 컨테이너에 방해가되지 않도록하는 것입니다. 이렇게하려면, 당신은 규정 된 임베디드 서블릿 컨테이너 의존성을 표시해야합니다.

 

자바 코드   컬렉션 코드
  1. <의존성>  
  2.         <의 groupId> org.springframework.boot </의 groupId>  
  3.         <artifactId를> 스프링 부팅 스타터 바람둥이 </ artifactId를>  
  4.         <분야> 제공 </ 범위>  
  5. </ 의존성>  

 

세 번째 부분은, 당신은 단지 패키지 받는다는 가입하자, 다음은 프로덕션 환경에 전쟁 패키지로 표시 안심 느낄 수 있습니다.

 

사실, 네 번째 단계는 (공식 문서를 포기하지 않았다), 여기에 전쟁의 이름, finalName 쓰기가있다.

 

 

자바 코드   컬렉션 코드
  1. <건설>   
            <finalName> 웹 소켓 </ finalName>   
            <플러그인>   
                <플러그인>   
                    <의 groupId> org.springframework.boot </의 groupId>   
                    <artifactId를> 스프링 부팅 받는다는 - 플러그인 </ artifactId를>   
                </ 플러그인>   
            </ 플러그인 >   
    </ 빌드>  

 

시험 생산 환경 (HTTP : // 호스트 : 포트 / 전쟁 패키지 이름), 당신은 당신의 아이디어가 아닙니다에이 프로젝트가 시작된 것을 알게 더 테스트 후 문제, 아첨 작업, 그리고이 개발 프로젝트를 켜 다음날 발견 가. 시간은 프로젝트를 같은 실수를 시작합니다.

 

자바 코드   컬렉션 코드
java.lang.IllegalStateException : ApplicationEventMulticaster와는 초기화되지 - 컨텍스트를 통해 이벤트를 멀티 캐스팅하기 전에 '새로 고침'을 호출 org.springframework.context.annotation.AnnotationConfigApplicationContext@4386f16 : 시작 날짜 [토 2017년 11월 (18) 중부 표준시 23시 58분 5초 ] 컨텍스트 계층의 루트   
    org.springframework.context.support.AbstractApplicationContext.getApplicationEventMulticaster (AbstractApplicationContext.java 일 : 414 )   
    org.springframework.context.support.ApplicationListenerDetector.postProcessBeforeDestruction에서 (ApplicationListenerDetector.java : 97 )   
    org.springframework.beans.factory에서 .support.DisposableBeanAdapter.destroy (DisposableBeanAdapter.java : 253 )  
    : org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean (DefaultSingletonBeanRegistry.java에서 578 )   
    : org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton에서 (DefaultSingletonBeanRegistry.java 554 )   
    org.springframework.beans.factory에서 : .support.DefaultListableBeanFactory.destroySingleton (DefaultListableBeanFactory.java 961 )   
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons (DefaultSingletonBeanRegistry.java 일 : 523 )   
    org.springframework.beans.factory.support.FactoryBeanRegistrySupport.destroySingletons에서 (FactoryBeanRegistrySupport 된 .java : (230))   
    org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingletons (DefaultListableBeanFactory.java에서 : 968 )   
    : org.springframework.context.support.AbstractApplicationContext.destroyBeans (AbstractApplicationContext.java에서 1,030 )   
    org.springframework.context.support에서. : AbstractApplicationContext.refresh (AbstractApplicationContext.java 556 )   
    org.springframework.boot.SpringApplication.refresh (SpringApplication.java 일 : 693 )   
    org.springframework.boot.SpringApplication.refreshContext에서 (SpringApplication.java : 360 )   
    org.springframework.boot에서 .SpringApplication.run (SpringApplication.java :303 )   
    org.springframework.boot.SpringApplication.run (SpringApplication.java 장소 : 1,118 )   
    org.springframework.boot.SpringApplication.run (SpringApplication.java 장소 : 1,107 )   
    com.easyto.websocket.WebsocketApplication.main에서 (WebsocketApplication.java : 11 )  
 2017년 11월 18일 23 : 58 : 05.752 org.springframework.boot.SpringApplication [ERROR] - 응용 프로그램 시작에 실패   
org.springframework.beans.factory.BeanDefinitionStoreException을 : 구성 구문 분석하는 데 실패 클래스를 [com.easyto.websocket.WebsocketApplication ]; 상자의 예외가 java.lang.IllegalStateException 수 있습니다 : 주석 방법을 성찰하는 데 실패 클래스를org.springframework.boot.web.support.SpringBootServletInitializer   
    : org.springframework.context.annotation.ConfigurationClassParser.parse (ConfigurationClassParser.java에서의 181 )   
    : org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions에서 (ConfigurationClassPostProcessor.java 308 )   
    에서 org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry (ConfigurationClassPostProcessor.java : 228 )   
    org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors에서 (PostProcessorRegistrationDelegate.java : 270 )  
    : org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors (PostProcessorRegistrationDelegate.java에서 93 )   
    : org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors (AbstractApplicationContext.java에서 687 )   
    org.springframework.context.support.AbstractApplicationContext.refresh에서 (AbstractApplicationContext.java : 525 )   
    org.springframework.boot.SpringApplication.refresh (SpringApplication.java 일 : 693 )   
    org.springframework.boot.SpringApplication.refreshContext에서 (SpringApplication.java : 360 )  
    : org.springframework.boot.SpringApplication.run (SpringApplication.java에서의 303 )   
    : org.springframework.boot.SpringApplication.run (SpringApplication.java에서 1,118 )   
    org.springframework.boot.SpringApplication.run (SpringApplication.java에서 : 1,107 )   
    com.easyto.websocket.WebsocketApplication.main (WebsocketApplication.java에서 : 11 )   
에 의해 발생 : java.lang.IllegalStateException :에 주석 방법을 성찰하는 데 실패 클래스 org.springframework.boot.web.support.SpringBootServletInitializer   
    org.springframework에 있습니다. core.type.StandardAnnotationMetadata.getAnnotatedMethods (StandardAnnotationMetadata.java : 163 )  
    : org.springframework.context.annotation.ConfigurationClassParser.retrieveBeanMethodMetadata (ConfigurationClassParser.java에서의 380 )   
    : org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass에서 (ConfigurationClassParser.java 314 )   
    org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass에서 (ConfigurationClassParser.java : 245 )   
    org.springframework.context.annotation.ConfigurationClassParser.parse에서 (ConfigurationClassParser.java : 198 )   
    org.springframework.context.annotation.ConfigurationClassParser.parse에서 (ConfigurationClassParser.java : 167 )   
    ...12 공통 프레임은 생략   
java.lang.NoClassDefFoundError가 :에 의해 발생 javax의 / 서블릿 / ServletContext를   
    java.lang.Class.getDeclaredMethods0 (원시 메소드)에   
    java.lang.Class.privateGetDeclaredMethods (Class.java 일 : 2701 )   
    java.lang의시. : Class.getDeclaredMethods (Class.java 1,975 )   
    org.springframework.core.type.StandardAnnotationMetadata.getAnnotatedMethods (StandardAnnotationMetadata.java 일 : 152 )   
    ... (17) 일반 프레임이 생략   
: java.lang.ClassNotFoundException가 :에 의해 발생 javax.servlet.ServletContext   
    java.net.URLClassLoader.findClass (URLClassLoader.java에서 :381 )   
    : java.lang.ClassLoader.loadClass (ClassLoader.java에서의 424 )   
    : $ sun.misc.Launcher AppClassLoader.loadClass (Launcher.java에서 335 )   
    java.lang.ClassLoader.loadClass에서 (ClassLoader.java : 357 )   
    . ... (21) 일반 프레임 생략  

 

 

당신이 도대체 무슨 생각까요? 사실,이 문서는 구덩이의 공식 웹 사이트가이 문제를 해결하기 위해, 당신은 그들 앞에서 소개 스프링 부팅 스타터 바람둥이 패키지 범위 또는 전체 항아리 패키지를 주석 필요

 

자바 코드   컬렉션 코드
  1. < 의존성 >   
        < 의 groupId > org.springframework.boot </ 의 groupId >   
        < artifactId를 > 스프링 부팅 스타터 톰캣 </ artifactId를 >   
        <! - <분야> 제공 </ 범위> ->   
    </ 의존성 >  

 

실험 후 주석 처리되어 전체 패키지를 넣을 수 있습니다.

 

자바 코드   컬렉션 코드
  1. <! - <의존성> ->   
                <! - <의 groupId> org.springframework.boot </의 groupId> ->   
                <! - <artifactId를> 스프링 부팅 스타터 바람둥이 </ artifactId를> ->   
                <! - <분야> 제공 </ 범위> ->   
    <! - </ 의존성> ->  

그럼 당신은 또한 당신이 주석 클래스 코드를 시작할 넣을 수 있습니다.

 

자바 코드   컬렉션 코드
@Override  
     보호 SpringApplicationBuilder의 구성 (SpringApplicationBuilder 응용 프로그램) {  
         반환 application.sources (. 응용 프로그램 클래스 );  
    }  

 

 

그럼 당신은 세상이 아름다운 것을 발견 할 것이다, 그 결과 패키지는에서 톰캣 실행도 생각 완벽한 실행에 진행 springboot 프로젝트를 사용하는

 

원래 결말.


 

 

발생하는 문제에 대한 해결책 : 원래 저자 springboot의 다른 버전이 충분히 변경 때문에 SpringBootServletInitializer는 튜토리얼 작업이 불평 따릅니다.

 

추천

출처www.cnblogs.com/CryOnMyShoulder/p/11281990.html