Springboot 打包
1,常用的三种打包方式
- jar 可以直接运行,一般用于被引用的模块 java -jar
- war 丢在 tomcat/webapp 中运行的,一般用于整个项目模块
- pom 用于多模块中的父模块
1. jar 默认打包方式就是 jar
<packaging>jar</packaging> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
运行 jar -jar 打好的 jar 路径, 接口 url 为 ip + 配置文件的 port + 配置文件的 contentx-path
2. war
<packaging>war</packaging> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
部署时候放到 tomcat 的 webapp 中,端口是 tomcat 的端口,项目根目录是 war 包在 webapp 路径下的名字
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.0.0</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build>
2,项目中引入第三方 jar 包或者本地 jar 包
可能 maven 仓库中没有我们需要的 jar 包,这时候就需要在引入第三方 jar 包,一般有两种方法
1)第一种种是将本地jar包放入项目目录中
2)第二种是将本地jar包安装在本地maven库
1. 项目中需要引入本地 jar 包,项目打包方式为 jar
1, 现在 resources 下创建一个 lib 文件夹,并将对应得 jar 包复制进来
2, pom 文件
<dependency> <groupId>com.bdip</groupId> <artifactId>weaver-webservice-2</artifactId> <version>1.0</version> <!--system,类似provided,需要显式提供依赖的jar以后,Maven就不会在Repository中查找它--> <scope>system</scope> <systemPath>${basedir}/src/main/resources/lib/xmlbeans-2.3.0.jar</systemPath> <!--项目根目录下的lib文件夹下--> </dependency> <dependency> <groupId>com.bdip</groupId> <artifactId>weaver-webservice-1</artifactId> <version>1.0</version> <!--system,类似provided,需要显式提供依赖的jar以后,Maven就不会在Repository中查找它--> <scope>system</scope> <systemPath>${basedir}/src/main/resources/lib/XmlSchema-1.4.7.jar</systemPath> <!--项目根目录下的lib文件夹下--> </dependency> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <!-- 打包的时候不加这个会找不到 jar 包 --> <configuration> <includeSystemScope>true</includeSystemScope> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
scope 值得含义
compile,缺省值,适用于所有阶段,会随着项目一起发布。 provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。 runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。 test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。 system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
2. 项目中需要引入本地 jar 包,项目打包方式为 war
1, 现在 resources 下创建一个 lib 文件夹,并将对应得 jar 包复制进来
2,pom 文件
<packaging>war</packaging> <dependency> <groupId>com.bdip</groupId> <artifactId>weaver-webservice-2</artifactId> <version>1.0</version> <!--system,类似provided,需要显式提供依赖的jar以后,Maven就不会在Repository中查找它--> <scope>system</scope> <systemPath>${basedir}/src/main/resources/lib/xmlbeans-2.3.0.jar</systemPath> <!--项目根目录下的lib文件夹下--> </dependency> <dependency> <groupId>com.bdip</groupId> <artifactId>weaver-webservice-1</artifactId> <version>1.0</version> <!--system,类似provided,需要显式提供依赖的jar以后,Maven就不会在Repository中查找它--> <scope>system</scope> <systemPath>${basedir}/src/main/resources/lib/XmlSchema-1.4.7.jar</systemPath> <!--项目根目录下的lib文件夹下--> </dependency> <!-- 这个地方用 spring-boot-maven-plugin 也行 --> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.4</version> <configuration> <webResources> <resource> <!-- 本地 jar 包相对路径 --> <directory>src/main/resources/lib/</directory> <!-- 打完包后的 jar 包路径 --> <targetPath>WEB-INF/lib/</targetPath> <includes> <include>**/*.jar</include> </includes> </resource> </webResources> </configuration> </plugin> </plugins> </build>
3, 启动类得改, 继承 SpringBootServletInitializer 类,重写 configure 方法
@SpringBootApplication public class FileOperatorApplication extends SpringBootServletInitializer { public static void main(String[] args){ SpringApplication.run(FileOperatorApplication.class,args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return super.configure(builder); } }
3. 将本地jar包安装在本地maven库,再去引用
1, 将下载好的 jar 包打包到本地 maven 库中
mvn install:install-file -Dfile=F:/ojdbc8.jar -DgroupId=com.oracle.jdbc -DartifactId=ojdbc8 -Dversion=12.2.0.1 -Dpackaging=jar -Dfile=F:/ojdbc8.jar 参数设置我下载的jar包的本地存放路径 -DgroupId=com.oracle.jdbc 参数为要安装的jar包所要指定在maven仓库中的groupid坐标值 -DartifactId=ojdbc8 参数为要安装的jar包所要指定在maven仓库中的artifactId坐标值 -Dversion=12.2.0.1 参数为要安装的jar包所要指定在maven仓库中的version坐标值 -Dpackaging=jar 参数为要安装的jar包所要指定在maven仓库中的install 格式
2,在项目的 pom 中引用
<dependency> <groupId>com.oracle.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>12.2.0.1<version> </dependency>
3. 可执行 jar 包和依赖 jar 包
1. 可执行 jar 包
可执行 jar 包,需要 spring-boot-maven-plugin 插件,会生成两个 jar 包,.jar 是可执行 jar 包,.original 是原本的依赖包,repeckage 重新命名成这样的。可执行 jar 包需要有程序入口,对于 springboot 来说就是 @SpringBootApplication 修饰的启动类。
父模块:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.3.2.RELEASE</version> <configuration> <fork>true</fork> <addResources>true</addResources> </configuration> </plugin> </plugins> </build>
子模块(需要打成可执行 jar 的模块):
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
可执行 jar 包结构:
2. 依赖 jar 包
Pom 中添加 spring-boot-maven-plugin 插件,生成的就是可执行 jar 包。不加这个插件,使用 mvn package
命令,生成的就是依赖 jar 包。依赖 jar 包 不需要程序启动入口,用来被引用。
依赖 jar 包结构:
3. 可执行 jar 包和依赖 jar 包区别
- 可执行 jar 包要比依赖 jar 包大,它包含了底层的依赖和编译后的 class 文件还有入口方法,不能用于依赖包
- 依赖包不包含需要的依赖,需要自行引入,这应该就是类似 mybatis 依赖引入后还要引入 mysql 依赖的原因吧,猜的。
4, Tomcat 启动
Linux下tomcat服务的启动、关闭与错误跟踪,使用PuTTy远程连接到服务器以后,通常通过以下几种方式启动关闭tomcat服务: 切换到tomcat主目录下的bin目录(cd usr/local/tomcat/bin) 1,启动tomcat服务 方式一:直接启动 ./startup.sh 方式二:作为服务启动 nohup ./startup.sh & 方式三:控制台动态输出方式启动 ./catalina.sh run 动态地显示tomcat后台的控制台输出信息,Ctrl+C后退出并关闭服务 解释: 通过方式一、方式三启动的tomcat有个弊端,当客户端连接断开的时候,tomcat服务也会立即停止,通过方式二可以作为linux服务一直运行 通过方式一、方式二方式启动的tomcat,其日志会写到相应的日志文件中,而不能动态地查看tomcat控制台的输出信息与错误情况,通过方式三可以以控制台模式启动tomcat服务, 直接看到程序运行时后台的控制台输出信息,不必每次都要很麻烦的打开catalina.out日志文件进行查看,这样便于跟踪查阅后台输出信息。tomcat控制台信息包括log4j和System.out.println()等输出的信息。 2,关闭tomcat服务 ./shutdown.sh
5,项目生产 war 包容易出现的问题
此问题困扰我许久
(1) 问题描述
使用Maven打包项目的时候,出现错误: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update)
(2) 问题分析
web项目下缺少WEB-INF/web.xml 当是在servlet 3.0之后,对于web.xml文件本身是可选的
(3) 解决方案
- 在pom.xml文件中定义一个参数配置
<properties> <failOnMissingWebXml>false</failOnMissingWebXml> </properties>
- 更新maven-war-plugin的版本
<plugin> <artifactId>maven-war-plugin</artifactId> <version>3.0.0</version> </plugin>
- 在webapp目录下创建WEB-INF/web.xml
本文作者:Hi.PrimaryC
本文链接:https://www.cnblogs.com/cnff/p/15157468.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步