使用maven引入第三方jar包以及打包

2023-10-31

我们知道,Maven 是通过仓库对依赖进行管理的,当 Maven 项目需要某个依赖时,只要其 POM 中声明了依赖的坐标信息,Maven 就会自动从仓库中去下载该构件使用。但在实际的开发过程中,经常会遇到一种情况:对接第三方厂商,人家给了一个jar包,然后项目需要使用这个jar包,但是这个jar包并没有上传到远程仓库,这时候就不能使用简单的pom依赖引用了,因此存在两个问题:

  1. 如何将jar引用到项目,并且能够让项目正常调用该jar包的方法
  2. 外部引用的jar如何打包进项目?

当然公司如果是有私服的,可以直接将jar包上传到私服。然后直接通过pom依赖简单的声明即可。

因此本篇文章重点针对于这两点进行讲解

目录

如下是个maven项目,java-demo.jar是我们要引入的jar包。

<!--外部依赖-->
<dependency>
  <groupId>com.gzl.cn</groupId>
  <artifactId>java-demo</artifactId>
  <!--依赖范围-->
  <scope>system</scope>
  <version>1.0-SNAPSHOT</version>
  <!--依赖所在位置-->
  <systemPath>${project.basedir}/src/main/resources/lib/java-demo.jar</systemPath>
</dependency>

在以上配置中,除了依赖的坐标信息外,外部依赖还使用了 scope 和 systemPath 两个元素。

  • scope 表示依赖范围,这里取值必须是 system,即系统。
  • systemPath 表示依赖的本地构件的位置。

打包插件:<includeSystemScope>true</includeSystemScope> 这个非常重要,是将外部依赖打包进来的,如果没有该配置,打出来的jar包是不包含外部jar包的,从而可能会导致运行异常!

<build>
      <!-- 打出来的jar包名 -->
    <finalName>maven-demo</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.4.2</version>
            <configuration>
                <!-- 主启动类全类名 -->
                <mainClass>com.gzl.cn.App</mainClass>
                <!-- 这个配置很重要,是将外部依赖打包进来的,如果没有该配置,打出来的jar包是不包含外部jar包的 -->
                <includeSystemScope>true</includeSystemScope>
            </configuration>
            <executions>
                <execution>
                  <!--自定义 id -->
                  <id>repackage</id>
                    <!--插件目标 -->
                  <goals>
                    <goal>repackage</goal>
                  </goals>
            </execution>
          </executions>
        </plugin>
    </plugins>
  </build>

但是现在存在一个问题,打出来的jar包可以用,但是特别大。

如下是jar包解压后的目录:

我们可以将jar解压会发现BOOT-INF的lib目录下是有一个第三方引用的jar。

然后在BOOT-INF的classes/lib目录下也有个这个jar包,这个是源码当中的jar包,上面的是打出来的jar包运行的时候所要依赖的jar包。正常来说我们就可以将源码当中的jar包给去掉,这样就可以减小jar包的大小。

添加如下依赖,排除jar的打包

<build>
	<resources>
	  <resource>
	    <directory>src/main/resources</directory>
	    <filtering>true</filtering>
	    <excludes>
	        <exclude>**/lib/**</exclude>
	    </excludes>
	  </resource>
	</resources>
	...以下省略
</build>

重新进行打包后会然后将jar解压观察源代码当中已经没有lib目录了。

java -jar 依然是可以运行起来的

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用maven引入第三方jar包以及打包 的相关文章

随机推荐

  • git submodule的使用

    转自 http webfrogs me 2013 03 20 git submodule 开发过程中 经常会有一些通用的部分希望抽取出来做成一个公共库来提供给别的工程来使用 而公共代码库的版本管理是个麻烦的事情 今天无意中发现了git的gi
  • 【sql基础】条件查询

    写在前面 作者简介 鲸海鹿林 博客主页 鲸海鹿林的主页 名言警句 keep calm and carry on SQL6 查找条件 是 例如 查找学生表中来自北京 city 的学生id和name select id name from st
  • Go + Redis 实现分布式锁

    文章目录 一 前言 1 1 需要对交易订单加锁原因 1 2 加锁方案 二 Go Redis 实现分布式锁 2 1 为什么需要分布式锁 2 2 分布式锁需要具备特性 2 3 实现 Redis 锁应先掌握哪些知识点 2 4 golang 连接r
  • Linux安装MySQL(超详细,附图安装)

    一 安装MySQL服务 1 查看是否已经安装了MySQL rpm qa grep mysql 如果什么都没有 就是还没有装过MySQL 2 下载MySQL安装包 wget i c http dev mysql com get mysql57
  • 项目实战(一)HTML5+CSS3+JS完成前端网站的制作

    css样式 padding 0 margin 0 box sizing border box html body font family segoe UI Tahoma Geneva verdana sans serif line heig
  • c++求数组中最大值最小值

    用algorithm中的 max element min element 这两个函数返回的是位置指针 max element可以获得最大值 1 普通数组用法 include
  • GM(灰度预测模型)

    根据某市1 6月的交通事故数量 建立灰色模型预测GM 1 1 G表示grey M表示model 预测7 8月份的交通事故数量 要求做精度检验 灰色预测的概念 1 灰色系统 白色系统和黑色系统 白色系统是指一个系统的内部特征是完全已知的 既系
  • C++ 继承

    继承允许依据一个类来定义另一个类 为说明继承 首先需要一个基类 当创建一个类时 不需要重新编写新的数据成员和成员函数 只需指定新建的类继承一个已有的类的成员即可 这个已有的类称为基类 新建的类称为派生类 基类 派生类 一个类可以派生自多个类
  • 曲面细分着色器---细分二维四边形

    openGL系列文章目录 文章目录 openGL系列文章目录 前言 一 曲面细分 二 细分二维四边形 参考 前言 术语Tessellation 镶嵌 是指一大类设计活动 通常是指在平坦的表面上 用各种几何形状的瓷砖相邻排列以形成图案 它的目
  • [转载]软件测试从零开始

    本文面向软件测试新手 从测试前的准备工作 测试需求收集 测试用例设计 测试用例执行 测试结果分析几个方面给出建议和方法 鉴于国内的软件开发 测试不规范的现状 本文为软件测试新手提供了若干个软件测试的关注点 关键词 软件测试 测试用例 测试需
  • AltiumDesigner20画图不求人13

    很多芯粉都遇到的问题就是AD20启动时间长 需要感觉N久的时间才能启动起来 今天为大家介绍可以提高AD20启动时间的方法八 取消一些相关的元件选择 视频教程 AltiumDesigner画图不求人13 提高AD20运行速度 取消一些元器件
  • nginx源码安装并设置开机自启

    NGINX源码安装 安装编译器和依赖包 openssl 软件包是用于提供网站加密证书服务的程序文件 提 pcre供 Perl 语言兼容的正则表达式库的软件包 root localhost yum y install gcc pcre dev
  • 使用Navicat for Oracle工具连接oracle

    使用Navicat for Oracle工具连接oracle 今天上网的时候偶然发现了一款oracle的客户端的图形化管理和开发工具 当看到这个界面的时候 感觉很舒服 便上网搜了一下这个工具 看百度百科之后感觉很出乎我的意料 这个产品对于许
  • 机器学习实战(十四)——利用SVD简化数据

    机器学习实战 十四 利用SVD简化数据 一 SVD的应用 SVD 奇异值分解 可以实现用小得多的数据集来表示原始数据集 达到去除噪声和冗余信息 以及压缩数据的目的 SVD的主要应用场景有 隐性语义索引 利用奇异值分解可以将文档中的概念或者主
  • 优秀的测试开发需要具备的能力

    最近很多同学在我公众号后台留言 提了很多问题 其中最多的就是如何提升技术能力 目前的就业市场 对测试的技术能力要求越来越高 测试开发岗位逐渐成为了香饽饽 测试开发对技术要求较高 部分同学要么技术基础较差 或没有找到一个很好的学习方法和路径
  • PyInstaller 4.6版本发布及更新内容

    4 6 2021 10 29 特征 添加对 Python 3 10 的支持 5693 Windows onedir默认情况下将清单嵌入到生成的可执行文件中 以避免用户重命名可执行文件时的潜在问题 例如 当用户重命名可执行文件并尝试在重命名之
  • Java开发规范手册(持续更新)

    一 Java开发规范 1 阿里巴巴泰山版java开发手册 pdf https www aliyundrive com s BbQfSbxR5T5 点击链接保存 或者复制本段内容 打开 阿里云盘 APP 无需下载极速在线查看 视频原画倍速播放
  • 为什么有了ERP还需要MES,看完这5点你就明白了

    随时MES项目实施的越来越多 涉及的行业也越来越多 我发现MES和ERP这两者的关系在制造企业中总是会被混淆 ERP实施对于制造企业而言是很关键的 它管理着企业的人力 资源 财务 计划等重要信息 当一个企业已经实施了ERP后 实施MES系统
  • linux nginx配置多站点,nginx配置多个站点的方法

    这里以配置2个站点对应2个不同域名为例 操作环境 ubuntu 16 04 64位 nginx 1 10 3 假设 IP地址 111 111 111 111 域名1 example1 com 放在 www example1 域名2 exam
  • 使用maven引入第三方jar包以及打包

    我们知道 Maven 是通过仓库对依赖进行管理的 当 Maven 项目需要某个依赖时 只要其 POM 中声明了依赖的坐标信息 Maven 就会自动从仓库中去下载该构件使用 但在实际的开发过程中 经常会遇到一种情况 对接第三方厂商 人家给了一