java动态加载jar文件并执行方法

2023-11-01

在项目开发的过程中,有时候需要动态灵活的加载某个jar包并执行里面的方法的时候,我们可以使用本篇文章写得方式去动态的加载jar包而不用使用原始方式引入jar包作为lib去使用,接下来介绍如何动态加载jar包。直接上代码:

核心的方法就是下面这个loadJar方法,我们传入一个jar包的路径即可。

public static void loadJar(String jarPath) {
    File jarFile = new File(jarPath);
    // 从URLClassLoader类中获取类所在文件夹的方法,jar也可以认为是一个文件夹
    Method method = null;
    try {
        method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
    } catch (NoSuchMethodException | SecurityException e1) {
        e1.printStackTrace();
    }
    //获取方法的访问权限以便写回
    boolean accessible = method.isAccessible();
    try {
        method.setAccessible(true);
        // 获取系统类加载器
        URLClassLoader classLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
        URL url = jarFile.toURI().toURL();
        method.invoke(classLoader, url);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        method.setAccessible(accessible);
    }
}

测试运行:

public static void main(String[] args) {
    String path = "D:/Maven_Repo/repository/org/apache/commons/commons-lang3/3.0/commons-lang3-3.0.jar";
    loadJar(path);
    Class<?> aClass = Class.forName("org.apache.commons.lang3.StringUtils");
    Object instance = aClass.newInstance();
    Object strip = aClass.getDeclaredMethod("strip", String.class, String.class).invoke(instance, "[1,2,3,4,5,6,2,3,5,1]", "[]");
    System.out.println(strip);
}

打印结果:

这里写图片描述

这样我们就实现了动态加载jar包并执行方法的过程,使程序的灵活性大大提高。

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

java动态加载jar文件并执行方法 的相关文章

  • eplan怎么生成端子图表_自定义EPLAN表格模板

    缘起 使用eplan制图 一个方便之处就是它能自动生成表格 如端子图表 插头图表等 但是有时候软件自带的图表模板又不符合我们的要求 想要自己定义表格 比如系统自带的端子图表是图1样式的 我想要的是图2样式的 如何做到呢 本文就以自定义端子图
  • 根据后序或者前序 + 中序建树的多种方法!

    根据 后序or前序 中序 建树的多种方法 以下例子都是实战题 值得收藏 值的学习 1 堆的方式 完全二叉树 利用了完全二叉树的特性 根结点i的孩子结点左孩子为2i 右孩子为2i 1 注意此时i是从1开始编号 但是每棵子树的根结点没有直接给出
  • python输入一个字符、如果是大写字母、转换为小写_python语言 输入一个字母 如果它是一个小写英文字母 则把它转换为对应的大写字母输出?...

    展开全部 char1 input 请输bai入一个小写英文du字母zhi if ord char1 gt ord a and ord char1 lt ord z print char1 upper else print 不是小写字母 da
  • JNI基本使用

    编译运行 首先介绍一些编写JNI的大致流程 可以直接调过这部分 生成头文件 这步可以不做 但是JNI对C C 函数的命名有严格要求 同时函数的命名会很长 所以还是直接生成头文件 然后从头文件里边复制函数声明 使用下面的命令生成头文件 记得代
  • SourceTree提交合并流程

    先写提交流程 缓存 提交 获取 拉取 解决冲突 提交 推送 下面和多分支开发合并 先保证 拉取到最新的 把项目切到主分支 鼠标点到被合并分支 右击选中 合并 到当前分支
  • ARM9/13——用C语言实现LED1/LED2/LED3灯点亮

    目录 代码 gpio h gpio c main c 运行效果 代码 gpio h ifndef GPIO H define GPIO H 1 RCC寄存器封装 用宏定义进行封装 define RCC AHB4 ENSETR volatil
  • 【Unity3D自学记录】Unity3D之KeyCode键值

    Backspace 退格键 Delete Delete键 TabTab键 Clear Clear键 Return 回车键 Pause 暂停键 Escape ESC键 Space 空格键 Keypad0 小键盘0 Keypad1 小键盘1 K
  • 为什么要在C ++ 11中使用“override”说明符?

    如果您知道Java 那么您可能已经很熟悉Java了 这对您来说可能是完全简单的 Override annotation 如果您一直使用C C 进行编码 那么这可能是新的 您可能会问自己一个问题 为什么在不必要的时候为什么要放一个额外的说明符
  • 数独基本规则_数独入门:你必须掌握的那些规则和技巧

    很多人想涉足数独领域 但苦于不知该如何入门和上手 甭愁了 北京市数独运动协会贴心地为菜鸟们总结了这一篇数独的元素 规则和技巧 满满的都是干货 如果你看完还觉得不够过瘾 那就移步至数独女王的达人攻略 接受高阶的训练和挑战吧 数独的规则 在空格
  • 获取OpenHarmony源码:从DevEco Marketplace获取(2)

    引言 OpenHarmony源码的获取方式有三种 从gitee GitHub等基于git的代码托管平台获取 从华为的DevEco Marketplace网站获取 从镜像站点获取 本文介绍如何在Ubuntu版本的DevEco Device T
  • 大数据知识目录

    第一阶段 安装虚拟机 第二阶段 Linux操作系统 第三阶段 zookeeper分布式协调服务框架 第四阶段 Hadoop分布式文件系统HDFS 第五阶段 Hadoop分布式计算Mapreduce和资源管理 第六阶段 数据仓库Hive 第七
  • 对于uts namespace共享的测试

    前言 单单以下列命令运行虽然是root 还不行 我们需要加 privileged 不然会报 hostname you must be root to change the host name docker run it uts host u
  • python写程序计算无穷级数_圆周率 π 展开 为 无穷级数

    圆周率 展开 为 无穷级数 其实 很简单 如图 可以用 黄色小三角形 和 橙色小三角形 以及 依此类推 下去 的 无数个 小三角形 来 逼近 圆面积 把 这个 无限逼近 的 圆面积 称为 S 因为 圆面积 r 所以 有 S r S r 即
  • 【VC++类型转换】CString和System::String类型的转换

    1 CString 转换为System String类型 这里的CString是指MFC的CString System String为CLR中的字符串类 我认为最简单的做法是 CString text System String str1
  • 【HBZ分享】Mysql的InnoDB原理

    没有配置主键时Mysql的InnoDB是如何做的 Mysql会使用自带的rowid作为主键 InnoDB的底层数据结构是什么 B Tree BTree的特点 MyISAM 非聚集索引 即 索引 和 对应数据 是分开的两个文件 找到对应数据后
  • 两年来主要工作框架图

    两年来主要工作框架图 包含了从MES到SAP的全程流程 从收集一线数据开始到汇总历史数据 归档 直到最后的BI DW分析展现 主要工作流程图
  • Java中正则表达式的使用

    在Java中 我们为了查找某个给定字符串中是否有需要查找的某个字符或者子字串 或者对字符串进行分割 或者对字符串一些字符进行替换 删除 一般会通过if else for 的配合使用来实现这些功能 如下所示 Java代码 public cla
  • 以互联网思维做好客户端软件

    加入爱奇艺的时间不长 但我感受到的震撼却不小 在外企打拼了十几个春秋 今年终于有机会进入一家国内顶尖的互联网企业 真真切切地有一番不太一样的体验 不过 我今天并不想说在外企工作与国内企业的差别 目前 我负责 爱奇艺PPS影音 PC客户端软件

随机推荐

  • 2种方法简单爬取JS加载的动态数据

    参考原文 http www cnblogs com buzhizhitong p 5697683 html 需要爬取的网站数据 http gkcx eol cn soudaxue queryProvince html page 1 一共是1
  • webdriver相关API

    webdriver相关API 一 元素的定位 二 操作测试对象 三 添加等待 四 打印信息 五 浏览器的操作 六 键盘事件 七 鼠标事件 一 元素的定位 webdriver提供的常用的对象定位方法 id 页面内 id 唯一 name cla
  • vector C++ 详细用法

    原文地址 http blog csdn net edify article details 4035243 vector是C 标准模板库中的部分内容 它是一个多功能的 能够操作多种数据结构和算法的模板类和函数库 vector之所以被认为是一
  • 压测注意事项

    文章目录 常用术语 流程及注意事项 常用工具 ab 命令 Jmeter 声明这里只是面向RD的 简单的 为摸清服务性能相关的自压测笔记 正规压测请向QA同学请教 常用术语 QPS 每秒请求数 也是吞吐量 内存使用情况 CPU使用情况 针对计
  • 企业级镜像仓库Harbor的部署及使用

    文章目录 一 环境准备 二 下载 三 HTTPS证书 1 生成证书颁发机构证书 2 生成服务器证书 3 提供证书给Harbor和Docker 四 Harbor配置文件 五 安装 六 Web页面 七 上传及拉取镜像 1 配置 2 上传镜像 3
  • ubuntu彻底卸载ffmpeg 与安装

    卸载 卸载旧的FFmpeg 输入以下指令 sudo apt get purge remove ffmpeg sudo apt get purge autoremove 当时试了一下 并没有成功 命令行输入 ffmpeg version 当时
  • 计算机视觉与深度学习-经典网络解析-GoogLeNet-[北邮鲁鹏]

    这里写目录标题 GoogLeNet 参考 GoogLeNet模型结构 创新点 Inception结构 它能保留输入信号中的更多特征信息 去掉了AlexNet的前两个全连接层 并采用了平均池化 引入了辅助分类器 GoogLeNet GoogL
  • 从Cookie 中取出来对特殊字符的转换

    页面存入Cookie中的值含有特殊字符 但所传的值中包含一些特殊字符比如 Cookie中是无法对特殊字符直接承载的 所以在存入Cookie时 将其转换为unicode编码 document cookie key escape value 但
  • Vue性能优化

    一 Object freeze 如果我们已知该数据是不会改变的 就不需要Vue将其设置成响应式的了 利用 Object freeze 该方法可以冻结一个对象 使该对象不能被修改 Vue就不能够为对象添加 setter getter等数据劫持
  • char str[]与char *str的区别

    在C语言中 对字符串的操作主要有两种方式 一是使用字符数组 char str 二是使用字符指针 那么二者有什么区别呢 下面将分述二者的使用 最后进行比较 一 字符数组 使用char str 定义一个字符数组str 中括号内可以写上数字表示数
  • JavaScript实现select下拉菜单省份和城市的级联菜单

    使用JavaScript中变量定义省份及对应的城市 应用select标签对象 实现二级级联的下拉菜单选中效果 即在省份下拉菜单中选中一个省份时 在城市下拉菜单中出现该省份对应的城市 HTML代码 div class choosecity p
  • 解决高德地图label添加的点击事件在移动端无效

    解决高德地图label添加的点击事件在移动端无效 近日工作中需要用到高德地图在PC端和移动端同时适配的需求 在PC端撸代码和调试一切顺利 但是在将项目在平板中测试时 发现绑定在label中的click事件无法触发 通过各种调试发现应该是高德
  • 10 KVM虚拟机配置-虚拟CPU和虚拟内存

    文章目录 10 KVM虚拟机配置 虚拟CPU和虚拟内存 10 1 概述 10 2 元素介绍 10 3 配置示例 10 KVM虚拟机配置 虚拟CPU和虚拟内存 10 1 概述 本节介绍虚拟CPU和虚拟内存的常用配置 10 2 元素介绍 vcp
  • 程序员工作上的闹心事 职场经验 正经的人生经验

    工作一直进展的很好 有些小瑕疵也整体影响不大 可是今天踩大坑了 我同时在做两个业务线的两个项目 A项目和B项目穿插进行 两位产品经理都达成了共识 A项目是主要的 只要有A项目的工作就先做 B项目在A做完之后再做 前几天A项目有了新需求开始开
  • 树莓派远程连接的三种方式总结

    总结远程连接树莓派的三种方式 对大部分linux系统同样适用 首先需要将树莓派连接上网 ifconfig记录ip地址 第一种 ssh远程连接 在linux下使用 ssh root 10 107 16 69 可以登录 在windows下使用p
  • unity 打包获取android手机系统权限

    查了一下资料 unity里面自带有动态获取用户权限的方法Permission 需要UnityEngine Android命名空间 使用动态获取接口RequestUserPermissions 参数是一个string数组类型参数 测试代码 u
  • 纯手工开发的网站如何快速对接CMS系统

    纯手工开发的网站如何对接CMS系统 在如今的建站市场上 大部分网站都是基于模板CMS系统建站 比如大家所熟知的织梦 帝国 WP等等 用这些CMS建站最大的好处就是有丰富的建站模板可供选择 建站费用低且大部分模板CMS系统开源相对来说易部署
  • 提高eclipse的性能,去除validate验证,关闭checking for update自动更新

    一 去除validate验证 1 给eclipse桌面快捷方式添加参数 这些按自己的机器来配置 可google到很多资料 如 D java eclipse3 2 1 eclipse exe XX UseParallelGC XX PermS
  • STM32硬件错误HardFault_Handler的处理方法

    在用Keil对STM32的程序进行仿真时程序有时会跑飞 停止仿真程序会停在HardFault Handler函数里的死循环while 1 中 这说明STM32出现了硬件错误 STM32出现硬件错误可能有以下原因 1 数组越界操作 2 内存溢
  • java动态加载jar文件并执行方法

    在项目开发的过程中 有时候需要动态灵活的加载某个jar包并执行里面的方法的时候 我们可以使用本篇文章写得方式去动态的加载jar包而不用使用原始方式引入jar包作为lib去使用 接下来介绍如何动态加载jar包 直接上代码 核心的方法就是下面这