利用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
猜你喜欢
- 这篇文章主要介绍了java property配置文件管理工具框架过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考
- 我们还是用一个小例子来看看自定义View和自定义属性的使用,带大家来自己定义一个带进度的圆形进度条,我们还是先看一下效果吧从上面可以看出,我
- 一、前言对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外。二、MyBatis的初始化做了什么2.1 Mybatis的
- 在Java的学习中,涉及到两个系统环境变量path和classpath一. path环境变量path环境变量是系统环境变量的一种,它用于保存
- 需求描述:企业开发过程中,经常需要将一些静态文本数据放到Resources目录下,项目启动时或者程序运行
- 定义: SharedPreferences
- Jackson解析嵌套类(MismatchedInputException)具体报错如下问题描述:Jackson解析嵌套类问题 调
- Java接口回调产生接口回调的场景在现实生活中,产生接口回调的场景很简单,比如我主动叫你帮我做一件事,然后你做完这件事之后会通知我,&quo
- MediaQuery通常情况下,不会直接将MediaQuery当作一个控件,而是使用MediaQuery.of获取当前设备的信息,用法如下:
- PermissionManage项目地址:https://github.com/why168/AndroidProjects/tree/ma
- 本文实例为大家分享了Java操作qq邮箱发送邮件的具体代码,供大家参考,具体内容如下今天尝试了使用QQ邮箱的POP3/IMAP/SMTP/E
- Java NIO(New IO)是Java 1.4版本中引入的一套全新的IO处理机制,与之前的传统IO相比,NIO具有更高的可扩展性和灵活性
- 接口回调是指:可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变
- 1.获取签名与模板进入阿里云平台,进入短信服务模块,在以下位置添加签名和模板(格式一定按照要求填写 审批的比较严格)2.编写模板与签名的枚举
- instanceof关键字用于判断一个引用类型变量所指向的对象是否是一个类(或接口、抽象类、父类)的实例。 举个例子:public
- 面试题1:你了解线程池么?简单介绍一下。java提供的一个java.util.concurrent.Executor接口的实现用于创建线程池
- 这篇文章主要介绍了SpringBoot下如何实现支付宝接口的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 系列文章已完成,目录如下:jdk-logging log4j logback日志系统实现机制原理介绍commons-lo
- 前言static和final是两个我们必须掌握的关键字。不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优
- 配置操作第一步操作如图:选择右侧的database页签,一般在idea的右边会有Database界面,点击它即可。有时候我们会发现这个Dat