SpringBoot怎么将项目正确打包为war包步骤(实测成功)

Springboot 专栏收录该内容
8 篇文章 0 订阅

  最近在做一个springboot+springcloud+consul的测试demo时,把springboot项目打包成war包放tomcat6、7、8版本都运行不起来。然后就在网上找一堆的资料,大部分的人写的打war方法都不全,特别是遇到一些标题党,看他们写的blog就是浪费时间。接下来,我说下具体步骤。

1、创建spingboot的项目

spring-cloud-consul-producer,目录结构如下:

pom.xml

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>jypay.com</groupId>
  5. <artifactId>spring-cloud-consul-producer</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. <packaging>war</packaging><!--改为war方式-->
  8. <name>spring-cloud-consul-producer</name>
  9. <url>http://maven.apache.org</url>
  10. <parent>
  11. <groupId>org.springframework.boot</groupId>
  12. <artifactId>spring-boot-starter-parent</artifactId>
  13. <version>2.0.3.RELEASE</version>
  14. </parent>
  15. <properties>
  16. <java.version>1.8</java.version>
  17. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  18. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  19. <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
  20. </properties>
  21. <dependencies>
  22. <dependency>
  23. <groupId>org.springframework.boot</groupId>
  24. <artifactId>spring-boot-starter-actuator</artifactId><!-- 健康检查依赖于此包 -->
  25. </dependency>
  26. <dependency>
  27. <groupId>org.springframework.cloud</groupId>
  28. <artifactId>spring-cloud-starter-consul-discovery</artifactId><!-- Spring Cloud Consul 的支持。 -->
  29. </dependency>
  30. <dependency>
  31. <groupId>org.springframework.boot</groupId>
  32. <artifactId>spring-boot-starter-web</artifactId>
  33. </dependency>
  34. <!-- 排除内置tomcat容器,导出成war包可以让外部容器运行spring-boot项目-->
  35. <dependency>
  36. <groupId>org.springframework.boot</groupId>
  37. <artifactId>spring-boot-starter-tomcat</artifactId>
  38. <!-- provided表明该包只在编译和测试的时候用 -->
  39. <scope>provided</scope>
  40. </dependency>
  41. <!-- 添加jsp支持 -->
  42. <dependency>
  43. <groupId>org.apache.tomcat.embed</groupId>
  44. <artifactId>tomcat-embed-jasper</artifactId>
  45. <!--<scope>provided</scope>-->
  46. <!-- 如果不注释,你会发现main线程运行报404错误,必须使用 spring-boot:run这个命令运行才行。所以我们注释掉-->
  47. </dependency>
  48. <dependency>
  49. <groupId>org.springframework.boot</groupId>
  50. <artifactId>spring-boot-starter-test</artifactId>
  51. <scope>test</scope>
  52. </dependency>
  53. <dependency>
  54. <groupId>junit</groupId>
  55. <artifactId>junit</artifactId>
  56. <scope>test</scope>
  57. </dependency>
  58. <dependency>
  59. <groupId>javax.servlet</groupId>
  60. <artifactId>javax.servlet-api</artifactId>
  61. <!-- provided表明该包只在编译和测试的时候用 -->
  62. <scope>provided</scope>
  63. </dependency>
  64. <dependency>
  65. <groupId>javax.servlet.jsp</groupId>
  66. <artifactId>jsp-api</artifactId>
  67. <version>2.2</version>
  68. <scope>provided</scope>
  69. </dependency>
  70. </dependencies>
  71. <dependencyManagement>
  72. <dependencies>
  73. <dependency>
  74. <groupId>org.springframework.cloud</groupId>
  75. <artifactId>spring-cloud-dependencies</artifactId>
  76. <version>${spring-cloud.version}</version>
  77. <type>pom</type>
  78. <scope>import</scope>
  79. </dependency>
  80. </dependencies>
  81. </dependencyManagement>
  82. <build>
  83. <!-- 修改war包名称 -->
  84. <finalName>springCloudConsulProducer</finalName>
  85. <plugins>
  86. <!-- 在打jar包时,用来指定主类的插件,打war包将其注释掉 -->
  87. <!-- <plugin>
  88. <groupId>org.springframework.boot</groupId>
  89. <artifactId>spring-boot-maven-plugin</artifactId>
  90. <configuration>
  91. <mainClass>${start-class}</mainClass>
  92. <layout>ZIP</layout>
  93. </configuration>
  94. <executions>
  95. <execution>
  96. <goals>
  97. <goal>repackage</goal>
  98. </goals>
  99. </execution>
  100. </executions>
  101. </plugin> -->
  102. </plugins>
  103. </build>
  104. </project>

添加配置,在配置文件添加内容如下。application.yml

  1. server.context-path: /
  2. server:
  3. port: 8511
  4. spring:
  5. application:
  6. name: spring-cloud-consul-producer
  7. cloud:
  8. consul:
  9. host: localhost
  10. port: 8500
  11. discovery:
  12. serviceName: service-producer # 注册到consul的服务名称

修改启动类如下:

  1. @EnableDiscoveryClient
  2. @EnableAutoConfiguration
  3. @ComponentScan(basePackages = "jypay.com.springcloud.consul.controller")/*注意要把controller扫描进项目的路径,不然不能加载你的controller*/
  4. @SpringBootApplication
  5. public class ConsulProducerApplication extends SpringBootServletInitializer{
  6. @Override
  7. protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
  8. return builder.sources(ConsulProducerApplication.class);
  9. }
  10. public static void main(String[] args) {
  11. SpringApplication.run(ConsulProducerApplication.class, args);
  12. }
  13. }

添加服务,新建 HelloController,提供 hello 接口, 返回 hello consul 字符串。

  1. package jypay.com.springcloud.consul.controller;
  2. import org.springframework.web.bind.annotation.RequestMapping;
  3. import org.springframework.web.bind.annotation.RestController;
  4. @RestController
  5. public class HelloController {
  6. @RequestMapping("/hello")
  7. public String hello() {
  8. return "hello consul.";
  9. }
  10. }

2、打war包部署

方式一:

项目右键--->run as--->maven install   完成打包如下图:

方式二:

项目右键--->run as--->maven build   弹出如下图:

按标红1、2、3操作可完成打包。

其他打包方式

比如使用mvn的命令可自行搜下就知道了。

3、部署

把第2步打成war文件放到tomcat8.5版本(以上)的webapps目录下,如果在windows下面启动startup.bat。如在linux则时行tomcat的bin目录输入./startup.sh。注意:如果tomcat版本为6.x或7.x是运行不起来的。我已实测了,如果大家想看具体的报错请自测了解下。

4、访问

在浏览器访问:http://localhost:8080/war包名/@RequestMapping.value

在我的为例子:http://localhost:8180/springCloudConsulProducer/hello

下载项目的链接:https://download.csdn.net/download/developerFBI/12016147

如大家按上面的操作有报错或其他问题请留言。谢谢!