利用maven引入第三方jar包以及打包
作者:怪?咖@ 发布时间:2023-11-15 04:23:17
我们知道,Maven 是通过仓库对依赖进行管理的,当 Maven 项目需要某个依赖时,只要其 POM 中声明了依赖的坐标信息,Maven 就会自动从仓库中去下载该构件使用。但在实际的开发过程中,经常会遇到一种情况:对接第三方厂商,人家给了一个jar包,然后项目需要使用这个jar包,但是这个jar包并没有上传到远程仓库,这时候就不能使用简单的pom依赖引用了,因此存在两个问题:
如何将jar引用到项目,并且能够让项目正常调用该jar包的方法
外部引用的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 依然是可以运行起来的
来源:https://blog.csdn.net/weixin_43888891/article/details/130611728


猜你喜欢
- 代码很简单,这里就不多废话了。package cc.c;import android.app.Activity;import android
- 本文实例讲述了Golang+Android基于HttpURLConnection实现的文件上传功能。分享给大家供大家参考,具体如下:这里要演
- 目录题目及要求:提示:原创代码:代码思路:题目及要求:给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。提示:0 <
- 在进行java编程的时候,我们可以生成可运行的jar文件,但是鉴于平台的不同,我们可能需要将jar文件转化为exe格式。今天,小编就用一款叫
- 本文实例讲述了Java面向接口编程之命令模式。分享给大家供大家参考,具体如下:一 点睛某个方法需要完成某个行为,但这个行为的具体实现无法确定
- 之前文章中我们讲到,java中实现同步的方式是使用synchronized block。在java 5中,Locks被引入了,来提供更加灵活
- Unity Shader学习:水墨效果偶然在网上看到9级铁甲蛹大神的水墨风格后处理觉得挺有意思,参照着实现一下,还是涉及到之前油画效果的算法
- 前文常用的控件介绍了不少,现在就来讨论一下手机开发中常用到的画图。要掌握Android的画图,首先就要了解一下,基本用到的如下一些图形接口:
- 前两天朋友问我,有没有使用过StackExchange.Redis,问我要个封装类,由于之前都是使用ServiceStack.Redis,由
- 记录一下微信第三方实现登录的方法。还是比较简单。一、必要的准备工作1.首先需要注册并被审核通过的微信开放平台帐号,然后创建一个移动应用,也需
- 对于clear与new Map的区别。我们首先来看一个例子,本例子是我在实际开发中遇到的,需求就是讲map放入到list中,说白了就是lis
- 概述在 Linux 平台下使用搜狗输入法在 IDEA 中输入中文时,输入法候选框总是静止在 IDEA 的左下角,而不能跟随光标进行移动。虽然
- 状态转移方程:d(i,j) = min(d(i,j),d(i,k)+d(k,j)),其中i<k<j思路对于每一个k(i<k
- Java读取txt文件内容。可以作如下理解:首先获得一个文件句柄。File file = new File(); file即为文件句柄。两人
- 一、前言在做Java项目开发过程中,涉及到一些数据库服务连接配置、缓存服务器连接配置等,通常情况下我们会将这些不太变动的配置信息存储在以 .
- 上图:IntelliJ Idea字符集编码设置步骤详解第一步:第二步:第三步:设置完以下点击OK来源:https://blog.csdn.n
- 问题由来一个简单的需求,要求把和当前用户相关的数据置顶展示。这里,我用了一个简单的用户表来复现这个需求。很简单,查询语句后面加上:order
- 1、本篇内容本文让大家掌握 springmvc 中异步处理请求,特别牛逼的一个功能,大家一定要掌握。2、看段代码,分析问题@Response
- 初步计划:或许由于个人原因,排球计分系统在假期就完成了,一直未写博客,就这样一直在推就是不想写,在加上过完年就工作了,可能刚实习工作比较紧所
- 开发过程中,我们往往需要大量与文件交互,读文件,写文件已成家常便饭,本地运行完美,但一上到投产环境,往往会出现很多令人措手不及的意外,或开发