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

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

1、创建spingboot的项目

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

pom.xml

<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>jypay.com</groupId>
  <artifactId>spring-cloud-consul-producer</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging><!--改为war方式-->

  <name>spring-cloud-consul-producer</name>
  <url>http://maven.apache.org</url>

  <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.0.3.RELEASE</version>      
   </parent>

   <properties>
	  <java.version>1.8</java.version>
	  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
	  <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
   </properties>
    
   <dependencies>
     <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId><!-- 健康检查依赖于此包 -->
     </dependency>
     <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId><!-- Spring Cloud Consul 的支持。 -->
     </dependency>
     <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>        
    </dependency>

    <!-- 排除内置tomcat容器,导出成war包可以让外部容器运行spring-boot项目-->
	<dependency>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-starter-tomcat</artifactId>
	    <!-- provided表明该包只在编译和测试的时候用 -->
	    <scope>provided</scope>
	</dependency>
	<!-- 添加jsp支持 -->
	<dependency>
	    <groupId>org.apache.tomcat.embed</groupId>
	    <artifactId>tomcat-embed-jasper</artifactId>
	    <!--<scope>provided</scope>-->
	    <!-- 如果不注释,你会发现main线程运行报404错误,必须使用 spring-boot:run这个命令运行才行。所以我们注释掉-->
	</dependency>
     
    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-test</artifactId>
       <scope>test</scope>
    </dependency>

     <dependency>
     	<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<scope>test</scope>
     </dependency>
     <dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>javax.servlet-api</artifactId>
        <!-- provided表明该包只在编译和测试的时候用 -->
		<scope>provided</scope>
	</dependency>		
	<dependency>
		<groupId>javax.servlet.jsp</groupId>
		<artifactId>jsp-api</artifactId>
		<version>2.2</version>
		<scope>provided</scope>
	</dependency>
  </dependencies>
  
  <dependencyManagement>
       <dependencies>
          <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-dependencies</artifactId>
              <version>${spring-cloud.version}</version>
              <type>pom</type>
              <scope>import</scope>
          </dependency>
       </dependencies>
  </dependencyManagement>
  <build>
	  <!-- 修改war包名称 -->
	  <finalName>springCloudConsulProducer</finalName>
	  <plugins>
	      <!-- 在打jar包时,用来指定主类的插件,打war包将其注释掉 -->
	      <!-- <plugin>
	         <groupId>org.springframework.boot</groupId>
	         <artifactId>spring-boot-maven-plugin</artifactId>
	         <configuration>
	         	<mainClass>${start-class}</mainClass>
	          	<layout>ZIP</layout>
	         </configuration>
	         <executions>
	            <execution>
	                <goals>
	                   <goal>repackage</goal>
	                </goals>
	            </execution>
	         </executions>
	      </plugin> -->
	  </plugins>
	</build>

</project>

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

server.context-path: /
server:
  port: 8511
spring:
  application:
    name: spring-cloud-consul-producer
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        serviceName: service-producer    # 注册到consul的服务名称

修改启动类如下:

@EnableDiscoveryClient
@EnableAutoConfiguration
@ComponentScan(basePackages = "jypay.com.springcloud.consul.controller")/*注意要把controller扫描进项目的路径,不然不能加载你的controller*/
@SpringBootApplication
public class ConsulProducerApplication extends SpringBootServletInitializer{	
	
	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
		return builder.sources(ConsulProducerApplication.class);
	}


	public static void main(String[] args) {
		SpringApplication.run(ConsulProducerApplication.class, args);
	}

}

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

package jypay.com.springcloud.consul.controller;

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

@RestController
public class HelloController {

	 @RequestMapping("/hello")
	 public String hello() {
	    return "hello consul.";
	 }

}

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

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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值