广告
返回顶部
首页 > 资讯 > 精选 >使用springboot maven打包插件的注意事项有哪些
  • 397
分享到

使用springboot maven打包插件的注意事项有哪些

2023-06-22 02:06:58 397人浏览 八月长安
摘要

小编给大家分享一下使用SpringBoot Maven打包插件的注意事项有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. springboot项目默认生成的可执行jar,为什么不能作为依赖导入其他项目?S

小编给大家分享一下使用SpringBoot Maven打包插件的注意事项有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

1. springboot项目默认生成的可执行jar,为什么不能作为依赖导入其他项目?

Spring Boot 项目默认的插件是spring-boot-maven-plugin:

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

使用上面的插件会将项目A打包成一个可执行的jar 和一个.original文件如下:

使用springboot maven打包插件的注意事项有哪些

可以看到,可执行的jar包比另一个original文件大多了,分别解压这两个文件,original文件去掉后缀重命名可解压:可执行jar打开如下:

使用springboot maven打包插件的注意事项有哪些

original文件重命名后打开如下:

使用springboot maven打包插件的注意事项有哪些

从这两张图片对比可以得知,可执行jar将项目的依赖都放进去了且目录和传统的jar包目录不同,多了一层BOOT-INF,因此这个jar包不能直接作为其他项目的依赖,不可执行jar没有把依赖打进去,和传统的jar包目录一致,因此去掉它的.original后缀可以作为其他项目的依赖。

2. 有木有办法可以一次性获得可执行jar和依赖jar呢?

官方当然也准备了,使用下面的插件即可:

 <plugin> <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-maven-plugin</artifactId>     <configuration>         <classifier>exec</classifier>     </configuration> </plugin>

打包结果:

使用springboot maven打包插件的注意事项有哪些

遇到的问题

将上述A项目的依赖jar引入另一个项目B时,启动项目依旧报找不到相关依赖?

原因:

因为上述的依赖jar 并没有把A项目依赖的其他jar包给引进来,只是把A项目的代码给打成了jar包

解决办法:

将上述的A项目依赖jar安装到本地maven仓库或者公司的私服,然后在B项目通过maven引入,因为通过maven引入的方式,项目会自动去寻找依赖jar本身所需要引入的依赖。(推荐)将上述的A项目依赖jar直接放到B项目工程下,即springboot引入第三方jar的方式,这样引入后,还需要单独把A项目中用到的依赖,在B项目的pom文件单独再引入一下。采用下面的打包插件,在打A项目的依赖jar时,就把A项目需要的依赖全部一起打进去

将项目中所有依赖都打进依赖jar的打包插件

<plugin>    <artifactId>maven-assembly-plugin</artifactId>    <configuration>        <appendAssemblyId>false</appendAssemblyId>        <descriptorRefs>            <descriptorRef>jar-with-dependencies</descriptorRef>        </descriptorRefs>        <arcHive>            <manifest>                <!-- 此处指定 main 方法入口的class -->                <mainClass>com.libii.sso.LibiiSpringBootStartApplication</mainClass>            </manifest>        </archive>    </configuration>    <executions>        <execution>            <id>make-assembly</id>            <phase>package</phase>            <Goals>                <goal>single</goal>            </goals>        </execution>    </executions></plugin>

打包结果:

使用springboot maven打包插件的注意事项有哪些

springboot打包插件详解(spring-boot-maven-plugin)

引入配置

<build>  <plugins>    <plugin>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-maven-plugin</artifactId>    </plugin>  </plugins></build>

新增后可以看Maven工具栏中有Plugins部分

使用springboot maven打包插件的注意事项有哪些

  • build-info:生成项目的构建信息文件 build-info.properties

  • repackage:这个是默认 goal,在 mvn package 执行之后,这个命令再次打包生成可执行的 jar,同时将 mvn package 生成的 jar 重命名为 *.origin

  • run:这个可以用来运行 Spring Boot 应用

  • start:这个在 mvn integration-test 阶段,进行 Spring Boot 应用生命周期的管理

  • stop:这个在 mvn integration-test 阶段,进行 Spring Boot 应用生命周期的管理

看一下SpringBoot父工程的pom.xml中打包插件的配置

发现父工程指定的是repackage [spring-boot-starter-parent pom.xml]

<plugin>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-maven-plugin</artifactId>    <executions>        <execution>            <goals>                <goal>repackage</goal>            </goals>        </execution>    </executions>    <configuration>        <mainClass>${start-class}</mainClass>    </configuration></plugin>

再看下打包结果内容中的MANIFEST.MF

Manifest-Version: 1.0
Implementation-Title: first-spring-boot-application
Implementation-Version: 1.0.0-SNAPSHOT
Built-By: weifei
Implementation-Vendor-Id: thinking-in-spring-boot
Spring-Boot-Version: 2.0.2.RELEASE
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: thinking.in.spring.boot.App
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Created-By: Apache Maven 3.5.2
Build-jdk: 1.8.0_172-ea
Implementation-URL: Http://maven.apache.org

发现Main-Class属性值为org.springframework.boot.loader.JarLauncher

这个值可以通过设置属性layout来控制

<plugin>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-maven-plugin</artifactId>    <configuration>        <!--使用-Dloader.path需要在打包的时候增加<layout>ZIP</layout>,不指定的话-Dloader.path不生效-->        <layout>ZIP</layout>        <!-- 指定该jar包启动时的主类[建议] -->        <mainClass>com.common.util.CommonUtilsApplication</mainClass>    </configuration>    <executions>        <execution>            <goals>                <goal>repackage</goal>            </goals>        </execution>    </executions></plugin>

设置<layout>ZIP</layout>时Main-Class为org.springframework.boot.loader.PropertiesLauncher

具体layout值对应Main-Class关系如下

JAR,即通常的可执行jar

Main-Class: org.springframework.boot.loader.JarLauncher

WAR,即通常的可执行war,需要的servlet容器依赖位于WEB-INF/lib-provided

Main-Class: org.springframework.boot.loader.warLauncher

ZIP,即DIR,类似于JAR

Main-Class: org.springframework.boot.loader.PropertiesLauncher

MODULE,将所有的依赖库打包(scope为provided的除外),但是不打包Spring Boot的任何Launcher

NONE,将所有的依赖库打包,但是不打包Spring Boot的任何Launcher 之所以可以使用java -jar运行,和MANIFEST.MF文件里的配置关系密切

赠送知识点:

  • 一般对使用spring-boot-maven-plugin插件打出的可执行jar不建议作为jar给其他服务引用,因为可能出现访问可执行jar中的一些配置文件找不到的问题。

  • 如果想让构建出来的原始jar(没有引入插件相关的包并且没有更改MANIFEST.MF)不被重新打包(重新打包会引入spring-boot-maven-plugin定制的配置和jar包),可以对spring-boot-maven-plugin插件配置classifier属性,自定义一个可运行jar名称,这样该插件就不会对原始的jar重命名操作了。

看完了这篇文章,相信你对“使用springboot maven打包插件的注意事项有哪些”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: 使用springboot maven打包插件的注意事项有哪些

本文链接: https://www.lsjlt.com/news/301865.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 使用springboot maven打包插件的注意事项有哪些
    小编给大家分享一下使用springboot maven打包插件的注意事项有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. springboot项目默认生成的可执行jar,为什么不能作为依赖导入其他项目?S...
    99+
    2023-06-22
  • springboot maven 打包插件介绍及注意事项说明
    目录springboot maven 打包插件介绍及注意事项1. springboot项目默认生成的可执行jar,为什么不能作为依赖导入其他项目?2. 有木有办法可以一次性获得可执行...
    99+
    2022-11-12
  • 使用maven仓库要注意哪些事项
    使用maven仓库时需要注意以下事项:1.正确配置仓库地址:在项目的pom.xml文件中配置正确的maven仓库地址,确保能够正确访...
    99+
    2023-10-09
    maven
  • Python导入包的注意事项有哪些
    这篇文章主要介绍Python导入包的注意事项有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是解决问题,而不是搞明白语言本身。2...
    99+
    2023-06-14
  • MySQL中enum插入的注意事项有哪些
    MySQL中enum插入的注意事项有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。今天在执行开发发过来的工单的时候,source批量导入执...
    99+
    2022-10-18
  • python闭包使用要注意哪些事项
    在使用Python闭包时,需要注意以下几个事项: 理解闭包的概念:闭包是指一个函数内部定义的函数,并且该内部函数引用了外部函数的...
    99+
    2023-10-27
    python
  • ajaxStart()使用注意事项有哪些
    本篇内容主要讲解“ajaxStart()使用注意事项有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ajaxStart()使用注意事项有哪些”吧!   ....
    99+
    2022-10-19
  • jQuery.post使用的注意事项有哪些
    本篇内容介绍了“jQuery.post使用的注意事项有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-19
  • innodb使用的注意事项有哪些
    使用InnoDB引擎时,有一些注意事项需要注意:1. 适当设置InnoDB缓冲池大小:InnoDB使用缓冲池来缓存数据和索引,因此设...
    99+
    2023-09-15
    innodb
  • Arrays.sort()使用的注意事项有哪些
    这篇文章主要讲解了“Arrays.sort()使用的注意事项有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Arrays.sort()使用的注意事项有哪些”吧!Arrays.sort()...
    99+
    2023-06-30
  • PHP 和 NPM 的函数打包,有哪些需要注意的事项?
    在 PHP 和 NPM 中,函数打包是一种非常常见的技术。它可以将多个函数打包到一个文件中,以便于组织和管理。但是,在进行函数打包时,需要注意以下几个事项,以避免出现意外的错误。 命名空间的问题 在 PHP 中,如果你将多个函数打包到...
    99+
    2023-09-12
    npm 函数 打包
  • Python 打包中的 numpy 缓存有哪些技巧和注意事项?
    Python 是一个强大的编程语言,它的开源生态系统提供了各种各样的工具和库,其中包括 numpy 库。Numpy 是一个基于 Python 的科学计算库,它提供了高效的多维数组操作和数学函数库。在 Python 打包的过程中,numpy...
    99+
    2023-10-26
    打包 numpy 缓存
  • ip代理软件的使用注意事项有哪些
    这篇文章将为大家详细讲解有关ip代理软件的使用注意事项有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用IP交换软件无非是为了带来更多的便利,所以有必要掌握相关注意事项的细节。在使用IP交换软件时,...
    99+
    2023-06-15
  • 租用的注意事项有哪些
    香港虚拟云主机租用的注意事项:1. 选择稳定性好的香港云主机,保证最佳的访问速度,有利于搜索引擎的优化,提高网站的排名。2. 货比三家,租用性价比高的云主机,降低成本消耗。3. 注意售后服务,选择能够保障提供良好售后的服务商,提供及时的技术...
    99+
    2022-10-24
  • replaceFirst使用时的注意事项有哪些
    这篇文章主要介绍了replaceFirst使用时的注意事项有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。replaceFirst使用时的注意事项公司项目最近有一个开发填...
    99+
    2023-06-29
  • Linux shell使用注意事项有哪些
    本篇内容介绍了“Linux shell使用注意事项有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!shell是系统的用户界面,提供了用户...
    99+
    2023-06-27
  • 使用FlexSDK4时注意事项有哪些
    这篇文章将为大家详细讲解有关使用FlexSDK4时注意事项有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用FlexSDK4注意事项TWaverFlex是支持SDK4的,FlexSDK4新增了Spa...
    99+
    2023-06-17
  • ADO.NET调用使用注意事项有哪些
    这篇文章将为大家详细讲解有关ADO.NET调用使用注意事项有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。ADO.NET调用大家可以试一下本文的示例,然后,根据自己的理解来酌情运用。'Usin...
    99+
    2023-06-17
  • MYSQL  group by使用的注意事项有哪些
    本文小编为大家详细介绍“MYSQL  group by使用的注意事项有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“MYSQL  group by使用的注意事项有哪些”文章能...
    99+
    2023-07-02
  • 使用mysql索引的注意事项有哪些
    这篇文章主要介绍了使用mysql索引的注意事项有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。mysql的优化可以从硬件设备的选择、操作...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作