springboot项目打包方式

springboot和ssm项目打包方式

1.打jar包

说明:

springboot项目默认的打包方式就是打jar包,因为它内嵌了tomcat,用不着打war包部署到tomcat的webapp目录下,安装了jdk,就可以直接运行

1.1 maven命令行的方式打jar包

cd 到项目的根目录
# 执行命令
mvn clean package
# 可以添加参数的方式打包,比如跳过测试
mvn install -Dmaven.test.skip=true
 
命令含义
mvn clean 删除 target 目录
mvn package 把 jar 打到本项目的 target 目录下
mvn install 把 jar 打到本项目的 target 目录下,之后再将它安装到本地的 maven 仓库中

1.2 eclipse打jar包

(1)打包部署到本地,并打包到项目的target目录

右击项目—>run as–>maven install

image-20200905212637655

(2)只是导报到项目根目录下的target目录

右击项目—>run as–>maven package …—>选择跳过测试的参数—>run

image-20200905212307772

image-20200905212513569

1.3 idea打jar包

image-20200905213805974

2.打war包

2.1 ssm项目打war包

ssm项目或者是javaweb(servlet项目的项目)打war包

同理打jar包的方式

说明:

如果ssm项目打war包和打jar包的方式同理,参考打jar包的方式

只用springboot项目打war包要注意,需要配置相关的参数

2.2springboot打war包

2.2.1修改pom.xml,修改打包方式为

<!--默认为jar方式-->
<!--<packaging>jar</packaging>-->
<!--改为war方式-->
<packaging>war</packaging>
 

2.2.2修改pom.xml,去除内置的tomcat

  • 第一种方式 : 排除spring-boot-starter-web中的Tomcat(推荐这种方式)
<!-- 在原有的spring-boot-starter-web依赖添加内容,不是添加新的依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!-- 不用的时候注释着部分 -->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 打war包部署到tomcat需要的依赖 -->
	<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<scope>provided</scope>
		</dependency>
 
  • 第二种方式 : 添加依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <!--打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。
        相当于compile,但是打包阶段做了exclude操作-->
    <scope>provided</scope>
</dependency>
<!-- 打war包部署到tomcat需要的依赖 -->
	<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<scope>provided</scope>
		</dependency>
 

2.2.3 修改启动类

  • 第一种方式 : 启动类继承SpringBootServletInitializer实现configure(推荐这种方式,不用的时候注释就可以)
@SpringBootApplication
public class Application extends SpringBootServletInitializer {

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

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(Application.class);
    }
}
 
  • 第二种方式 : 新增加一个类继承SpringBootServletInitializer实现configure
public class ServletInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        //此处的Application.class为带有@SpringBootApplication注解的启动类
        return builder.sources(Application.class);
    }

}
 

注意事项:

关于项目名路径的问题

1.springboot项目打war包项目的配置

使用外部Tomcat部署访问的时候,application.properties(或者application.yml)中配置的

server.port=

server.servlet.context-path=

将失效,请使用tomcat的端口,tomcat,webapps下项目名进行访问。

为了防止应用上下文所导致的项目访问资源加载不到的问题,

建议pom.xml文件中标签下添加标签:

注意:这是打包好了之后war包的名字

<build>
    <!-- 应与application.properties(或application.yml)中context-path保持一致 -->
    <finalName>war包名称</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
2.springboot项目打war包在tomcat配置
在其 <Host> 标签下⾯加⼊如下内容即可:
<Context path="/" docBase="/usr/local/tomcat/webapps/项目名称" reloadable="false"></Context>
 

说明:

部署到linux环境,docBase属性的值是项目位置的全路径

如果部署到的是window系统,好像写项目名就可以

反正以后遇到类似问题,试一下,这边可以说是一个坑

关于使用maven打包命令的问题

使用mvn命令行打包,运行:

clean是清除之前的包,-Dmaven.test.skip=true是忽略测试代码

jar 方式打包,使用内置Tomcat:mvn clean install -Dmaven.test.skip=true

运行:java -jar 包名.jar

war 方式打包,使用外置Tomcat:mvn clean package -Dmaven.test.skip=true

运行:${Tomcat_home}/bin/目录下执行startup.bat(windows)或者startup.sh(linux)

关于打包报错的解决方案

1.The requested profile “pom.xml” could not be activated because it does not exist

20190509085826846_

3.springboot打war包自己实现方式

参考网址:

http://doc.ruoyi.vip/ruoyi/document/hjbs.html#%E9%83%A8%E7%BD%B2%E7%B3%BB%E7%BB%9F

  1. 修改打包方式位war
<packaging>war</packaging>

image-20210909192528313

  1. web容器中进行部署配置类
package com.shaoming;

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

/**
 * @ClassName: SpringBootDemoServletInitializer
 * @Author: 邵明
 * @Date: 2021/9/9 19:17
 * @Description:
 */
public class SpringBootDemoServletInitializer extends SpringBootServletInitializer
{
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
    {
        /**
         SpringBootDemoApplication 是springboot项目启动类
         */
        return application.sources(SpringBootDemoApplication.class);
    }
}
 
  1. 排除内置tomcat(不重要)

SpringBoot去除内嵌Tomcat(PS:此步骤不重要,因为不排除也能在容器中部署war

<!-- 多模块排除内置tomcat -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
	<exclusions>
		<exclusion>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
		</exclusion>
	</exclusions>
</dependency>
		
<!-- 单应用排除内置tomcat -->		
<exclusions>
	<exclusion>
		<artifactId>spring-boot-starter-tomcat</artifactId>
		<groupId>org.springframework.boot</groupId>
	</exclusion>
</exclusions>
 

4.总结

  1. 这种方式比之前的老方式方便简单,如果打jar包只需要注释pom.xml的<packaging>war</packaging>这行配置就可以了,很简单

  2. 最后设置好需要修改的就是

    2.1 打包方式

    2.2 打包过后包的名称

来源:https://blog.csdn.net/shaoming314/article/details/109153530
posted @ 2022-10-02 17:18  程序员小明1024  阅读(910)  评论(0编辑  收藏  举报