写在前面:
在我们的实战开发的最后阶段,我们需要将自己写的项目打包放到服务器上。首先来了解一下打包的两种方式:
jar包:直接通过内置tomcat运行,不需要额外安装tomcat。如需修改内置tomcat的配置,只需要在spring boot的配置文件中配置。内置tomcat没有自己的日志输出,全靠jar包应用输出日志。但是比较方便,快速,比较简单。
war包:传统的应用交付方式,需要安装tomcat,然后放到waeapps目录下运行war包,可以灵活选择tomcat版本,可以直接修改tomcat的配置,有自己的tomcat日志输出,可以灵活配置安全策略。相对打成jar包来说没那么快速方便。
一.jar的打包和部署
1.我们在对写好的项目进行打包之前,只需要对pom.xml文件进行相关的修改,因为pom文件中有很多我们项目引入的依赖,这些依赖我们都不能进行改动,下面是我的pom文件,方便以后作为参照,为了保证准确性和完整性,关于我项目的一些依赖我没有进行删除,五个核心点在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.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.baizhi</groupId>
<artifactId>SpringBoot_day1</artifactId>
<version>1.0-SNAPSHOT</version>
//核心点一: jar
<packaging>jar</packaging>
<name>SpringBoot_day1 Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<!--继承springboot的父项目 仲裁中心:管理jar的版本号-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.7.RELEASE</version>
</parent>
<dependencies>
<!--引入springboot的web支持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入jsp的集成jar包-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<!--整合mybatis 注意不要使用1.0.0版本,因为不支持springboot的热部署也不支持springboot部署成jar包-->
<dependency> <!--mybaties和springboot集成的启动器-->
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency> <!--数据库连接-->
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!--引入测试依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--springboot热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<!--lombok相关插件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
</dependency>
</dependencies>
<build>
<finalName>SpringBoot_day1</finalName>
<!--引入jsp运行插件-->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
//核心点二: 版本最好是1.4.2.RELEASE,其他版本可能出现问题
<version>1.4.2.RELEASE</version>
<configuration>
//核心点三:com.baizhi.Application入口类的全限定名
<mainClass>com.baizhi.Application</mainClass>
//核心点四: JAR
<layout>JAR</layout>
</configuration>
</plugin>
</plugins>
//核心点五: 将静态资源也拷贝到相关目录下
<resources>
<!-- 打包时将jsp文件拷贝到META-INF目录下-->
<resource>
<!-- 指定resources插件处理哪个目录下的资源文件 -->
<directory>src/main/webapp</directory>
<!--注意此次必须要放在此目录下才能被访问到-->
<targetPath>META-INF/resources</targetPath>
<includes>
<include>**/**</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/**</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
</build>
</project>
注意别入坑:pom文件中需要去除servlet-api这个依赖!!!
2.点击进行打包
3.打包成功和jar包的位置
4.找到jar的位置
5.dos窗口输入:java -jar SpringBoot_day1.jar
6.地址栏进行项目访问即可~
二.war的打包和部署
1.当使用外部的tomcat时 需要把内部的tomcat排除
需要去掉下面的依赖:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
2.对入口类做修改 extends SpringBootServletInitializer
@MapperScan(basePackages = "com.baizhi.mapper")
@SpringBootApplication
public class SpringbootJarApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(SpringbootJarApplication.class, args);
}
/*针对war包使用*/
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SpringbootJarApplication.class);
}
}
3.pom.xml中必须将打包方式声明成war
4.插件中指定 main函数
5.使用maven指令打包,并将war包放置在Tomcat的webapps中。项目名即为war包的名字,端口号为当前所使用的Tomcat的端口号。