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
(2)只是导报到项目根目录下的target目录
右击项目—>run as–>maven package …—>选择跳过测试的参数—>run
1.3 idea打jar包
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
3.springboot打war包自己实现方式
参考网址:
http://doc.ruoyi.vip/ruoyi/document/hjbs.html#%E9%83%A8%E7%BD%B2%E7%B3%BB%E7%BB%9F
- 修改打包方式位war
<packaging>war</packaging>
- 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);
}
}
- 排除内置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.总结
- 这种方式比之前的老方式方便简单,如果打jar包只需要注释pom.xml的<packaging>war</packaging>这行配置就可以了,很简单
- 最后设置好需要修改的就是
2.1打包方式
2.2打包过后包的名称