1. 我的环境

基于SpringBoot2.2.0、Spring 5.2.0

Jdk1.8.x 

Eclipse photon

Maven 3.2.3 独立

项目名称:example

2. 在Spring 官网 https://start.spring.io/ 定制项目组件,目前是2.2.1,我后面将会修改为2.2.0

如下几张图

SpringBoot2.2.x Maven项目导出war包(包含自定义jar包的处理)

 

开发工具组件,选择如下图:

SpringBoot2.2.x Maven项目导出war包(包含自定义jar包的处理)

Web组件选择如下:

SpringBoot2.2.x Maven项目导出war包(包含自定义jar包的处理)

 

模板引擎选择如下:

SpringBoot2.2.x Maven项目导出war包(包含自定义jar包的处理)

 

安全组件选择如下图(测试的话也可以不选择):

SpringBoot2.2.x Maven项目导出war包(包含自定义jar包的处理)

数据库组件选择:当前测试项目不需要数据库访问组件,所以未选择。

在选择完需要的组件后,点击生成,会生成一个pom.xml项目

SpringBoot2.2.x Maven项目导出war包(包含自定义jar包的处理)

 

3. 将生成的项目压缩包保存到本地,解压,修改pom.xml,将版本由2.2.1 修改为2.2.0; 我这里修改主要是因为我本地仓库已经下载了SpringBoot2.2.0的相关包,为了避免从新去下载2.2.1的包,所以进行了修改。

4. 将example项目导入eclipse,选择导入 已经存在的Maven项目

5. 因为默认使用的是SpringBoot自带的内嵌tomcat,要打成war包,需要去掉内嵌tomcat并添加单独的完整tomcat的依赖。

   具体如下:

 SpringBoot2.2.x Maven项目导出war包(包含自定义jar包的处理)

 有可能还存在单独的内嵌tomcat依赖,也需要去掉,如下

SpringBoot2.2.x Maven项目导出war包(包含自定义jar包的处理)

检查依赖包,必须不包含如下内容才表示依赖修改成功:

SpringBoot2.2.x Maven项目导出war包(包含自定义jar包的处理)

 

然后增加一个基于web容器的Spring初始化类:如果是上面的项目导入的,默认已经存在了,具体内容如下:

package mygroup.example;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

public class ServletInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(ExampleApplication.class);
    }

}

 

6. 直接导出项目的war包

右键pom.xml 文件

->run as -> Maven clean   清理打包路径

->run as -> Maven install   打包,其中Installing 表示生成的war包的位置

7. 多数情况下,实际的项目可能还存在自定义的jar包,如果是这样的话,就需要先将自定义的jar包上传到本地Maven仓库。

 例如:在pom.xml文件中添加依赖,如下,表示将自定义的在E盘的jar包 epcloud_sdk-1.0.0.jar 在本地Maven仓库生成元数据

SpringBoot2.2.x Maven项目导出war包(包含自定义jar包的处理)

eclipse加载完成后,去本地仓库查看,在......\repository\mygroup\epcloud_sdk\1.0.0 下生成了2个文件

SpringBoot2.2.x Maven项目导出war包(包含自定义jar包的处理)

然后将E盘的jar包copy到本地maven仓库对应的目录:

SpringBoot2.2.x Maven项目导出war包(包含自定义jar包的处理)

修改pom.xml 中对自定义jar包的依赖,主要是去掉<scope>属性及<systemPath>属性,因为现在已经可以将自定义的jar当作完全的普通maven依赖的jar包来进行处理。

SpringBoot2.2.x Maven项目导出war包(包含自定义jar包的处理)

修改完成后保存,就可以直接导出项目的war包了。

8 .部署测试,这里写了一个测试的rest控制器。

package mygroup.example.test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/test")
public class TestController {

       @GetMapping("/hello")
        public Map<String,Object> hello(){
            Map<String, Object> map = new HashMap<String,Object>();
            map.put("hello", "true");
            map.put("pageSize", 30);
            
            List<Map<String,Object>> teStrList = new ArrayList<Map<String,Object>>();
            Map<String, Object> map1 = new HashMap<String,Object>();
            map1.put("vname", "test");
            map1.put("vid", "123455");
            
            
            Map<String, Object> map2 = new HashMap<String,Object>();
            map2.put("vname", "test2");
            map2.put("vid", "3333333");
            teStrList.add(map1);
            teStrList.add(map2);
            map.put("data", teStrList);
            return map;
        }
}
 

如果是jre,导出war包的时候将报错

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project example: Compilation failure
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?

所以必须使用jdk,将依赖修改为jdk,然后导出war包。如果导出太慢,可以去掉pom.xml中的测试依赖部分并注释掉测试代码

SpringBoot2.2.x Maven项目导出war包(包含自定义jar包的处理)

 

SpringBoot2.2.x Maven项目导出war包(包含自定义jar包的处理)

设置默认登录密码:

SpringBoot2.2.x Maven项目导出war包(包含自定义jar包的处理)

导出war包,war包将生成在本地maven仓库中,如下图:

SpringBoot2.2.x Maven项目导出war包(包含自定义jar包的处理)

将这里war包直接部署在tomcat中,然后进行访问:

输入:http://localhost:8080/example-0.0.1-SNAPSHOT/test/hello  后将显示登录页面,使用上面在application.properties中配置的用户名密码进行登录,然后输出结果如下图:

SpringBoot2.2.x Maven项目导出war包(包含自定义jar包的处理)

本文至此结束,希望对您有所帮助。

 

 

相关文章: