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) 解决方案

  1. 在pom.xml文件中定义一个参数配置
<properties>
<failOnMissingWebXml>false</failOnMissingWebXml>
</properties>
  1. 更新maven-war-plugin的版本
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
</plugin>
  1. 在webapp目录下创建WEB-INF/web.xml

本文作者:Hi.PrimaryC

本文链接:https://www.cnblogs.com/cnff/p/15157468.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   primaryC  阅读(606)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.