머리말
Spring Boot 프로젝트는 일반적으로 내장 Tomcat 또는 Jetty 서버에서 실행되며 전쟁 패키지를 사용하여 외부 서비스 컨테이너에 배치하지 않습니다. Linux에 배치하더라도 일반적으로 응용 프로그램 클래스를 직접 시작합니다. 그러나 때때로 우리는 외부 서버에 배포 해야하는데, 이는 Spring Boot에게는 약간 번거 롭습니다.
아래에서 많이 말하지 않겠습니다. 자세한 소개를 함께 살펴 보겠습니다.
환경 진술 :
JDK : 1.8
서버 : Alibaba Cloud, Ubuntu 16.04
SpringBoot : 1.5.9. release
목적
원격 서버에서 SpringBoot를 Tomcat에 패키지하십시오.
pom.xml
<? xml version = "1.0"encoding = "utf-8"?> <project xmlns = "http://maven.apache.org/pom/4.0.0"xmlns : xsi = "http://www.w3.org/2001/xmlschema-instance" xsi : schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.xsd"> <modeversion> 4.0.0 </modelversion> <groupid> waibao </groupid> <artifactid> <버전> 1.0-snapshot </version> <parging> war </packaging> <부모> <groupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-parent </artifactid> <bersion> 1.5.9. release </version> </parenties> <java.10 </version> 1.8 <java.siversionsesseversesseversions. <pectionies> <pectionency> <groupid> org.springframework.boot </groupid> <artifactid> Spring-Boot-Starter-web </artifactid> </dependency> <!-Tomcat 지원을 제거하고 컴파일 타임 지원을 제거합니다. <Artifactid> Spring-Boot-Starter-Tomcat </artifactid> <scope> 제공 </scope> </fectionement> <prectionement> <groupid> org.mybatis.spring.spring.boot </groupid> <artifactid> mybatis-spring-boot-starter </artifactid> 1.1 </version> <! <pectionency> <groupid> org.springframework.boot </groupid> <artifactid> 스프링-부트 스타터-티멜 러프 </artifactid> </dependency> <!-타임 잎의 비 스트릭 모드 구성에 종속성이 필요합니다-> <pelevency> <groupid> net.sourceforge.nekohtml> <artifactid> nekohtml </artifactid> <bersion> 1.9.22 </version> </dependency> <pectionement> <groupid> org.springframewort.boot </groupid> <artifactid> spring-boot-starter-jdbc </eppendency> <provers <artifactid> mybatis-spring-boot-starter </artifactid> <3.1 </version> </dependency> <pectionency> <groupid> org.springframework.boot </groupId> <artifactid> spring-boot-starter test </artifactId> <Scope> </specte> </delponement> </scope> <groupid> mysql </groupid> <artifactid> mysql-connector-java </artifactid> <bersion> 6.0.6 </version> </dependency> <!-Alibaba Connection Pool-> <pelevency> <groupId> com.alibaba </groupid> <artifactid> druid </artifactid> <! FASTJSON-> <pectionency> <groupId> com.alibaba </groupId> <artifactid> fastjson </artifactid> <버전> 1.2.40 </version> </dependency> <!-핫 배포-> <pectionency> <groupId> org.springframework.boot </group-hopt> spring-doptools </artiftools> <버전> 1.5.9. release </version> <pectional> true </옵션> </옵션> </scope> </scope> </fectionency> </feencevencies> <build> <finalname>/testweb </finalname> <plugin> <plugin> <groupid> org.apache.maven.pprugins </groupicid> maven-war-pupartin> <버전> 2.4 </version> <configuration> <feaLonMissingWebXml> false </failonMissingWebXml> </configuration> </plugin> </plugins> </build> </project>
알아채다
1. Maven 플러그인은 SpringBoot와 함께 제공되는 플러그인을 사용할 수 없습니다. 이 플러그인을 사용하여 다음 오류를보고했습니다
목표 ORG.apache.maven.plugins : Maven-Jar-Plugin : 2.6 : 프로젝트 프로젝트의 JAR (기본 -JAR) : GOOM ORG.apache.Maven.plugins의 실행 기본-자르 : Maven-Jar-Plugin : 2.6 : jar 실패 : 실행 중에 API 비 호환성이 발생했습니다. org.apache.maven.plugins : maven-jar-plugin : 2.6 : jar : java.lang.exceptioninInitializerError : null
Maven 플러그인을 수정하십시오
<플러그인> <groupid> org.apache.maven.plugins </groupid> <artifactid> maven-war-plugin </artifactid> <bersion> 2.4 </version> <configuration> <failonmissingwebxml> false </failonmissingwebxml> </plugin>
Web.xml이 없기 때문에 주목해야합니다. 더 추가하십시오
<configuration> <feaLonMissingWebXml> false </failonMissingWebXml> </configuration>
2.
<빌드> <FinalName> xxx </finalname> </build>
FinalName은 Application.yml의 Context-Path와 일치해야합니다.
3. 시간을 컴파일하기 위해 Tomcat의 종속성을 변경해야합니다.
<pectionency> <groupid> org.springframework.boot </groupid> <artifactid> Spring-Boot-Starter-Tomcat 제공 </scope> </fectionency>
4. SpringBoot Entry 클래스, SpringBootservleTinitializer를 상속하고 덮어 쓰기
보호 된 SpringApplicationBuilder Configure (SpringApplicationBuilder Application) {return application.sources (mainApplication.class); }여기서 mainApplication.class는 SpringBoot의 입력 클래스입니다.
팩
프로젝트의 루트 디렉토리로 이동하십시오. 아이디어를 사용하는 경우 여기에 직접 입력하십시오.
MVN Clean Package -Dskiptests
포장 후, 해당 .war 파일이 프로젝트의 대상 폴더에서 생성됩니다.
업로드
Tomcat의 WebApps에 전쟁 파일을 던지십시오.
해결되지 않은 문제 :
나는 원래 항아리 패키지로 만들고 싶었다. 그런 다음 SpringBoot를 직접 시작하십시오. Wu Nai는 항아리 패키지로 만들었고 Maven 플러그인의 오류를 계속보고했습니다. 전쟁 패키지로 만 만들어 Tomcat에 업로드 할 수 있습니다.
이 문제를 해결 한 사람이 있으면 알려주십시오.
이 기사에서는 이것이 버그라고합니다 ...
https://issues.apache.org/jira/browse/msite-724
고쳐 쓰다. . . .
문제가 해결되었습니다. SpringBoot를 Jar에 직접 포장하여 실행할 수 있습니다.
이유:
<플러그인> <플러그인> <groupid> org.springframework.boot </groupid> <artifactid> spring-boot-maven-plugin </artifactid> </plugin> </plugins>
SpringBoot가 제공하는 공식적인 예는이 플러그인을 사용하는 것입니다.
Maven은 Maven-Jar-Plugin 버전 2.4 및 2.6 버전을 자동으로 다운로드합니다.
그러나 Maven은 기본적으로 버전 2.6에 의존합니다. . Maven-Jar-Plugin 2.6jar가 호환되지 않는 것이 처음에 프로젝트에 의해보고 된 오류를 알지 못했습니다. 이로 인해 오류가 발견되지 않았습니다. .
즉, 버전 2.6은 호환되지 않습니다. 버전 2.4로 수동으로 변경하십시오. 아래 그림과 같이 :
<Plugins> <Plugin> <groupId> org.springframework.boot </groupid> <artifactid> spring-boot-maven-plugin </artifactid> </plugin> <plugin> <groupid> org.apache.maven.plugins </groupid> <artifactid> maven-jar-version> 2. </플러그인> </플러그인>
요약
위는이 기사의 전체 내용입니다. 이 기사의 내용에 모든 사람의 연구 나 작업에 대한 특정 참조 가치가 있기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다. Wulin.com을 지원 해주셔서 감사합니다.