文档章节

Spring boot 项目打包及引入本地jar包

Os_yxguang
 Os_yxguang
发布于 06/21 23:44
字数 893
阅读 143
收藏 19

Spring Boot 项目打包以及引入本地Jar包

[TOC]

上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。

spring boot 打包方式

我们知道,传统应用可以将程序打包成 war 文件,部署到 Tomcat 容器中运行。而 spring boot 默认内置集成了 tomcat 容器,提供将应用打包成独立的 jar 包,并通过 java 命令 java -jar <name>.jar 直接运行,接下来简单介绍下这两种打包方式。

spring boot 打 jar

查看 spring boot 官方文档 Part VIII. Build tool pluginsSpring Boot Maven Plugin一节内容,主要配置为:

  1. 引入 spring-boot-maven-plugin 插件,配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<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>
	<!-- ... -->
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<version>2.0.3.RELEASE</version>
				<executions>
					<execution>
						<goals>
							<goal>repackage</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>
  1. 配置打包文件格式,配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<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">
	<!-- ... -->
	<packaging>jar</packaging>
	<!-- ... -->
</project>
  1. 运行打包命令,命令如下:
mvn clean package -Dmaven.test.skip=true

spring boot 打 war

spring boot 支持生成传统 war 包,同时也支持 java -jar 命令运行。查看官方文档 Traditional Deployment,配置如下:

  1. 引入 spring-boot-maven-plugin 插件,同上。

  2. 配置打包文件格式,配置如下:

<packaging>war</packaging>
  1. 引入 tomcat starter 依赖, 并设置 scopeprovided
<dependencies>
	<!-- … -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-tomcat</artifactId>
		<scope>provided</scope>
	</dependency>
	<!-- … -->
</dependencies>
  1. 修改程序入口,继承 SpringBootServletInitializer,并复写 configure 方法
@SpringBootApplication
public class Application extends SpringBootServletInitializer {

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
		return application.sources(Application.class);
	}

	public static void main(String[] args) throws Exception {
		SpringApplication.run(Application.class, args);
	}
}
  1. 运行打包命令,同上。

此时,生成的 war 包,既可以部署在 Tomcat 容器中,又可以通过 java -jar 命令运行。

打包本地 jar

在项目部署过程中有时候会遇到打包本地 jar 包 到 war 包中,应该如何处理呢? 在使用 IDEA 开发环境中,我们通过 Add as Library... 设置成 Project libModule lib 后,发现在项目打包后, war 包中并没有包含本地的 jar 文件。其实,这里还需要几步配置来完成:

  1. 修改 spring-boot-maven-plugin 配置,设置 includeSystemScopetrue
	<plugin>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-maven-plugin</artifactId>
    	<configuration>
        	<includeSystemScope>true</includeSystemScope>
    	</configuration>
	</plugin>
  1. 设置依赖包范围为 system,并设置依赖包路径。
<dependency>
	<groupId>org.apache</groupId>
    <artifactId>opensaml</artifactId>
    <version>2.3.1</version>
    <scope>system</scope>
    <systemPath>${basedir}/src/main/lib/opensaml-2.3.1.jar</systemPath>
</dependency>

通过以上两步,本地路径下的 ${basedir}/src/main/lib/opensaml-2.3.1.jar 包就会被打包到 war 文件中。但是需要注意的是 system 范围与provided范围类似,打包后的 jar 文件会被放在 WEB-INF/lib-provided 目录下,如果直接通过 java -jar 命令运行 war 文件,可以正常启动。如果将 war 文件放在 Tomcat 容器中直接运行,可能会报错: class not found。这是因为:

Start-Class: hello.Application 
Spring-Boot-Classes: WEB-INF/classes/
Spring-Boot-Lib: WEB-INF/lib/
Main-Class: org.springframework.boot.loader.WarLauncher

Tomcat 只检查 servlet定义的 WEB-INF/lib 路径,但 java -jar 时、SpringWarLauncher 还引入了存放着 Tomcat 相关 jarlib-provided 目录

@Override
public boolean isNestedArchive(Archive.Entry entry) {
    if (entry.isDirectory()) {
        return entry.getName().equals(WEB_INF_CLASSES);
    }
    else {
        return entry.getName().startsWith(WEB_INF_LIB)
                || entry.getName().startsWith(WEB_INF_LIB_PROVIDED);
    }
}

© 著作权归作者所有

共有 人打赏支持
Os_yxguang
粉丝 0
博文 9
码字总数 3349
作品 0
程序员
私信 提问
springboot冲突导致的发版失败

一、Spring boot因为内嵌tomcat容器,项目发布的时候可以把项目打包为jar包,如何将spring boot项目打包成可发布到tomcat中的war包项目呢?# # 1.需要打包成war包项目,首先需要在pom.xml文件...

坎布里奇
08/17
0
0
精通SpringBoot——第五篇:写一个spring-boot-starter包

为了能更好的理解Springboot的自动配置和工作原理,我们今天来手写一个spring-boot-hello-starter。这个过程很简单,代码不多。接下来我们看看怎么开始实践。 1. 新建maven工程。 这块就不演...

developlee
07/25
0
0
SpringBoot2系列教程(二)maven项目包 (特别完整!)

前言:相信很多朋友都会遇到一些maven打包失败的问题,这里我把我自己再打包过程中遇到的问题都分享出来,希望能帮到大家。 本教程大概内容如下: 1. 依赖传递失效问题解决方案 注意父类继承...

fantj666
03/08
0
0
geekidea/spring-boot-assembly

spring-boot-assembly 在spring boot项目中使用maven profiles和maven assembly插件根据不同环境打包成tar.gz或者zip 将spring boot项目中的配置文件提取到外部config目录中 将spring boot项...

geekidea
昨天
0
0
Maven针对SpringBoot的多项目依赖配置

版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82811826 在Spring Boot中对于多项目依赖配置,可通过Maven实现 更多精...

asing1elife
09/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

day179-2018-12-16-英语流利阅读-待学习

《海王》:上映 7 天,票房突破 9 亿,DC 要翻身? Daniel 2018-12-16 1.今日导读 这部电影堪称“有《阿凡达》般的视觉奇观,《指环王》般的史诗质感,《夺宝奇兵》般的寻宝历险,《狮子王》...

飞鱼说编程
4分钟前
1
0
window下安装maven

1.下载软件包: 2.解压到当前的安装路径: D:\Maven3.5.3 3.添加环境变量: 新建一个名为:MAVEN_HOME 填写解压路径:D:\Maven3.5.3 打开path,添加:%MAVEN_HOME%\bin 确定即可。 4.验证环境...

狼王黄师傅
18分钟前
5
0
聊聊flink的FsCheckpointStorage

序 本文主要研究一下flink的FsCheckpointStorage CheckpointStorage flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/CheckpointStorage.java /** * CheckpointStor......

go4it
40分钟前
3
0
makefile 常用函数

Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员,至少不能称得上是 Unix程序员。今天我们来学习下makefile的常用函数。 《GNU make》h...

科陆李明
今天
18
0
Android 报错 Could not find com.android.tools.build:aapt2:3.2.1-4818971.

报错信息: Could not find com.android.tools.build:aapt2:3.2.1-4818971.Searched in the following locations: file:/C:/Users/96110/AppData/Local/Android/Sdk/extras/m2reposito......

lanyu96
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部