我写的dubbo扩展jar包如何无侵入的给别人使用

简介: 我写的dubbo扩展jar包如何无侵入的给别人使用

有这么一个场景, 我写了一个dubbo spi扩展jar包 dubbo-ext.jar; 这个Jar包是不可执行包(没有main函数), 它的作用是对现有运行的dubbo服务做一些增强;

那么这样的一个扩展包,要符合即插即用的原则;要无侵入的增强;


正常情况下我们可能直接在pom文件依赖一下这个包;因为无侵入原则,那么这条路就不能走了; 那可怎么办呢?


1.Tomcat启动方式

如果目标服务是用Tomcat启动的,那么很简单,我们可以直接把我们的扩展jar包dubbo-ext.jar 扔进lib文件夹下面;Tomcat会自动为我们加载这些jar包;


2. java -jar 启动方式

我们现在大部分的项目都会选择SpringBoot框架; 最常用的打包方式是打成 jar 包;然后使用javar -jar XXX.jar 的启动方式; 但是这样的话, jar包已经打好了, 我们怎么把我们的扩展包dubbo-ext.jar 放入到 XXX.jar中呢?


解压XXX.jar包,然后把我们的扩展包dubbo-ext.jar 扔到 BOOT-INF/lib中;

然后重新打包; 这种方式应该是也可以实现的; 但是却比较繁琐;这里推荐第二种方式


使用命令jar -uf0 XXX.jar BOOT-INF/lib/ 直接将我们的扩展包dubbo-ext.jar直接放到XXX.jar中的 BOOT-INF/lib/中; 下面我们具体详细讲一下这个操作步骤


jar 命令参数说明


image.png

image.png

看到上面的参数选项; 我们决定使用 -uf0 来操作;

  • u: 更新现有的档案
  • f: 指定档案文件名
  • 0:仅存储;不适用任何ZIP压缩

操作流程

image.png

图中features-common.jar 是我们的扩展包;

features-services-0.0.1-SNAPSHOT.jar我们的可执行包;

我们要把features-common.jar包放到 features-services-0.0.1-SNAPSHOT中;


我们可以先解压看看 features-services-0.0.1-SNAPSHOT 里面是什么样的

jar -xf features-services-0.0.1-SNAPSHOT;

解压出来是下面的; 所有的依赖jar都在BOOT-INF/lib 中;

image.png

那么这个BOOT-INF/lib就是我们的目标路径;

Ok,知道了路径,我们把刚刚解压之后的文件全部删除掉;(只是解压出来看看路径而已)


在当前路径创建目标文件路径 mkdir -p BOOT-INF/lib ;


然后把扩展包features-common.jar放到这个路径下,如下图

image.png

这里很重要,路径一定要对!

  • 执行命令jar -uf0 features-service-0.0.1-SNAPSHOT.jar BOOT-INF/lib/
    执行这条命令的路径一定要对;就在BOOT-INF文件夹同级别

image.png

  • 加载完成!

执行完毕之后 ,我们可以校验一下是否放入到了 features-services-0.0.1-SNAPSHOT.jar; 所以我们解压一下刚刚更新过的 features-services-0.0.1-SNAPSHOT.jar;

``

image.png

可以看到我们刚刚的扩展jar包 features-common.jar 已经加载到了 jar包中;


jar -uf0 features-service-0.0.1-SNAPSHOT.jar BOOT-INF/lib/

最容易出错的地方就是后面的文件夹路径了; 这个可不是你随便写的;

你这个路径必须跟features-service-0.0.1-SNAPSHOT.jar解压之后存放依赖jar的路径保持一致的!不然就算加载成功了,路径不对,也使用不了 !


如果目标文件是一个war包呢

同理~; war包解压看看;

image.png

把路径改成 WEB-INF/lib 就行了!!

如果是一个zip包呢?

原理都是一样的,可以先解压看看jar的路径;

亲测ok!

image.png

相关文章
|
7月前
|
druid Java Maven
杨校老师课堂之java_关于如何下载jar包的教程
杨校老师课堂之java_关于如何下载jar包的教程
132 0
|
6月前
|
Java
[JarEditor]可直接修改jar包的IDEA插件
### 修改JAR包变得更简单:JarEditor插件简介 **背景:** 开发中常需修改JAR包中的class文件,传统方法耗时费力。JarEditor插件让你一键编辑JAR包内文件,无需解压。 **插件使用:** 1. **安装:** 在IDEA插件市场搜索JarEditor并安装。 2. **修改class:** 打开JAR文件中的class,直接编辑,保存后一键构建更新JAR。 3. **文件管理:** 右键菜单支持在JAR内新增/删除/重命名文件等操作。 4. **搜索:** 使用内置搜索功能快速定位JAR包内的字符串。
568 2
[JarEditor]可直接修改jar包的IDEA插件
|
6月前
|
弹性计算 Java Serverless
Serverless 应用引擎操作报错合集之上传自定义JAR包,启动时报错,是什么导致的
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
6月前
|
关系型数据库 Java 分布式数据库
PolarDB产品使用问题之部署到服务器上的Java应用(以jar包形式运行)无法连接,如何解决
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
6月前
|
监控 Ubuntu Java
如何在Ubuntu上运行Jar包?
【7月更文挑战第9天】
354 0
如何在Ubuntu上运行Jar包?
|
6月前
|
Java 应用服务中间件
tomcat7 与 tomcat8 加载 jar包的顺序
tomcat7 与 tomcat8 加载 jar包的顺序
210 0
|
6月前
|
Java 应用服务中间件 API
java 启动查看jar包加载顺序并设置classpath
java 启动查看jar包加载顺序并设置classpath
435 0
|
7月前
|
Java Maven 容器
springBoot项目导入外部jar包
springBoot项目导入外部jar包
|
7月前
|
JSON Java Apache
如何查看jar包的官网地址
如何查看jar包的官网地址
252 1