我的编程空间,编程开发者的网络收藏夹
学习永远不晚

maven springboot怎么将jar包打包到指定目录

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

maven springboot怎么将jar包打包到指定目录

这篇文章将为大家详细讲解有关maven springboot怎么将jar包打包到指定目录,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

如何将jar包打包到指定目录

1.目的

将不常用的比如spring,druid等不常用打包到lib目录,这样每次上线不需要上传这些。第三方或者常改动的还打包到本身的jar包内,每次上线都会新打包。

这样原来的100多M的jar包,可以变成2、3M。

如图所示:

原来的打包方式

maven springboot怎么将jar包打包到指定目录

改后的方式:

maven springboot怎么将jar包打包到指定目录

maven springboot怎么将jar包打包到指定目录

2.修改pom

简单解释一下,includes标签内就是打入jar包第三方jar。将上面的2M的包解压缩后,就是includes的包。

如图所示。

maven springboot怎么将jar包打包到指定目录

excludeGroupIds和excludeArtifactIds 是配置不在lib目录里的包,由于java启动加载的机制是优先加载jar包,
再加载外部目录,如果jar包都存在两个地方,这样配置就没有意义了,每次还是得重新发布lib目录,所以将includes
中的包,再在excludeGroupIds 和 excludeArtifactIds 配置上

<build>    <plugins>        <plugin>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-maven-plugin</artifactId>            <version>2.0.5.RELEASE</version>            <executions>                <execution>                    <goals>                        <goal>repackage</goal>                        <goal>build-info</goal>                    </goals>                </execution>            </executions>            <configuration>                <layout>ZIP</layout>                <includes>                    <include>                        <groupId>nothing</groupId>                        <artifactId>nothing</artifactId>                    </include>                    <include>                        <groupId>com.etc</groupId>                        <artifactId>etc-manage-api</artifactId>                    </include>                    <include>                        <groupId>com.etc</groupId>                        <artifactId>etc-manage-core</artifactId>                    </include>                    <include>                        <groupId>com.etc</groupId>                        <artifactId>etc-manage-rpc-api</artifactId>                    </include>                    <include>                        <groupId>com.sinoiov.etc.apollo</groupId>                        <artifactId>apollo-spring-boot-starter</artifactId>                    </include>                </includes>            </configuration>        </plugin>        <plugin>            <groupId>org.apache.maven.plugins</groupId>            <artifactId>maven-dependency-plugin</artifactId>            <executions>                <execution>                    <id>copy</id>                    <phase>package</phase>                    <goals>                        <goal>copy-dependencies</goal>                    </goals>                    <configuration>                        <excludeGroupIds>                            com.sinoiov.etc.apollo                        </excludeGroupIds>                        <excludeArtifactIds>                            etc-manage-api,etc-manage-core,etc-manage-rpc-api                        </excludeArtifactIds>                        <outputDirectory>${project.build.directory}/lib</outputDirectory>                    </configuration>                </execution>            </executions>        </plugin>    </plugins></build>

3.修改启动脚本

原脚本

java -jar etc-manage-service-basic-2.2.0.jar

现脚本 (如果相对目录不好用,就用绝对目录试试)

java Dloader.path=../lib  -jar etc-manage-service-basic-2.2.0.jar

jar包外指定配置文件及原理

解决方案

修改maven的pom.xml文件

不拷贝资源文件

<resources>    <resource>        <directory>class="lazy" data-src/main/resources</directory>        <excludes>            <exclude>*</exclude>        </excludes>        <filtering>true</filtering>    </resource></resources>

修改打包方式

<plugin>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-maven-plugin</artifactId>    <configuration>        <layout>ZIP</layout>    </configuration></plugin>

运行

假设application.properties和application-{profile}.properties都在/tmp/temp/config,jar文件在/tmp/temp

java -Dloader.path=file:///tmp/temp/config,demo-1.0.jar -jar demo-1.0.jar

原理

对比jar包中MANIFEST.MF文件在`ZIP配置前后的区别

配置前:

Main-Class: org.springframework.boot.loader.JarLauncherStart-Class: com.chinaunicom.gateway.GatewayApplication

配置后:

Main-Class: org.springframework.boot.loader.PropertiesLauncherStart-Class: com.chinaunicom.gateway.GatewayApplication

发现是类加载器变了,查看org.springframework.boot.loader包下所有加载器实现:

maven springboot怎么将jar包打包到指定目录

查看五个类描述:官方文档

JarLauncher

Launcher for JAR based archives. This launcher assumes that dependency jars are included inside a /BOOT-INF/lib directory and that application classes are included inside a /BOOT-INF/classes directory.

WarLauncher

Launcher for WAR based archives. This launcher for standard WAR archives. Supports dependencies in WEB-INF/lib as well as WEB-INF/lib-provided, classes are loaded from WEB-INF/classes.

PropertiesLauncher

Launcher for archives with user-configured classpath and main class via a properties file. This model is often more flexible and more amenable to creating well-behaved OS-level services than a model based on executable jars.
Looks in various places for a properties file to extract loader settings, defaulting to application.properties either on the current classpath or in the current working directory. The name of the properties file can be changed by setting a System property loader.config.name (e.g. -Dloader.config.name=foo will look for foo.properties. If that file doesn't exist then tries loader.config.location (with allowed prefixes classpath: and file: or any valid URL). Once that file is located turns it into Properties and extracts optional values (which can also be provided overridden as System properties in case the file doesn't exist):
loader.path: a comma-separated list of directories (containing file resources and/or nested archives in .jar or .zip or archives) or archives to append to the classpath. BOOT-INF/classes,BOOT-INF/lib in the application archive are always used
loader.main: the main method to delegate execution to once the class loader is set up. No default, but will fall back to looking for a Start-Class in a MANIFEST.MF, if there is one in ${loader.home}/META-INF.

关于“maven springboot怎么将jar包打包到指定目录”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

maven springboot怎么将jar包打包到指定目录

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

maven springboot怎么将jar包打包到指定目录

这篇文章将为大家详细讲解有关maven springboot怎么将jar包打包到指定目录,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如何将jar包打包到指定目录1.目的将不常用的比如spring,dru
2023-06-22

Java之怎么实现maven打完jar包之后将jar包放到指定位置

这篇文章主要介绍“Java之怎么实现maven打完jar包之后将jar包放到指定位置”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java之怎么实现maven打完jar包之后将jar包放到指定位置”
2023-07-06

Java之maven打完jar包之后将jar包放到指定位置汇总

这篇文章主要介绍了Java之maven打完jar包之后将jar包放到指定位置汇总,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-05-15

Springboot怎么使用maven打包指定mainClass

这篇“Springboot怎么使用maven打包指定mainClass”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spri
2023-07-06

怎么使用maven将项目的test代码打包进jar中

这篇文章给大家分享的是有关怎么使用maven将项目的test代码打包进jar中的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。maven将项目的test代码打包进jar中项目结构如下…/src/mai
2023-06-29

怎么将java或javaweb项目打包为jar包或war包

这篇文章主要介绍“怎么将java或javaweb项目打包为jar包或war包”,在日常操作中,相信很多人在怎么将java或javaweb项目打包为jar包或war包问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
2023-07-02

怎么将Android Studio项目打包成jar

这期内容当中小编将会给大家带来有关怎么将Android Studio项目打包成jar,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Android Studio 如何打JAR包在eclipse中我们知道如何
2023-05-30

怎么将SpringBoot项目打war包

本篇文章为大家展示了怎么将SpringBoot项目打war包,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、pom.xml配置修改jar//修改为
2023-06-15

linux怎么将目录打包成压缩包

在Linux系统中,可以使用tar命令将目录打包成压缩包。具体步骤如下:1. 打开终端(Terminal)。2. 使用cd命令进入要打包的目录,例如:cd /path/to/directory。3. 使用下面的命令将目录打包成.tar文件:
2023-10-19

怎么将本地SpringBoot项目jar包部署到Linux环境中

这篇文章主要介绍了怎么将本地SpringBoot项目jar包部署到Linux环境中的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么将本地SpringBoot项目jar包部署到Linux环境中文章都会有所收获,
2023-07-06

Maven打包时怎么指定启动类

这篇“Maven打包时怎么指定启动类”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Maven打包时怎么指定启动类”文章吧。M
2023-07-05

maven打包怎么指定jdk的版本

这篇文章主要讲解了“maven打包怎么指定jdk的版本”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“maven打包怎么指定jdk的版本”吧!maven打包指定jdk的版本问题今天遇到个问题,
2023-07-05

tomcat怎么指定war包目录

在Tomcat中,可以通过修改server.xml配置文件来指定war包的目录。具体步骤如下:打开Tomcat安装目录下的conf文件夹,找到server.xml配置文件。在标签内部添加标签,指定war包的路径
tomcat怎么指定war包目录
2024-03-11

SpringBoot怎么将配置文件挂到jar包外面

这篇文章主要介绍“SpringBoot怎么将配置文件挂到jar包外面”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot怎么将配置文件挂到jar包外面”文章能帮助大家解决问题。一、Sp
2023-07-05

springboot项目怎么引入本地依赖jar包并打包到lib文件夹中

这篇文章主要介绍“springboot项目怎么引入本地依赖jar包并打包到lib文件夹中”,在日常操作中,相信很多人在springboot项目怎么引入本地依赖jar包并打包到lib文件夹中问题上存在疑惑,小编查阅了各式资料,整理出简单好用的
2023-07-06

SpringBoot项目中怎么对第三方JAR进行打包

SpringBoot项目中怎么对第三方JAR进行打包?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。SpringBoot项目打包成可运行JAR包,但是不是所有JA
2023-05-31

springboot怎么实现jar运行复制resources文件到指定的目录

今天小编给大家分享一下springboot怎么实现jar运行复制resources文件到指定的目录的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我
2023-07-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录