目录结构如下.

├── main

│   ├── java

│   │   └── lu

│   │   └── tool

│   │   └── jar

│   │   ├── InterfaceRunner.java

│   │   └── Loader.java

│   └── resources

└── test

├── java

└── resources

InterfaceRunner.java 为挂载 jar 中类的实现接口

Loader.java 为jar的加载器和执行器

所有第三方包的jar路径,通过 web 界面管理,然后存储在一个文件中,这里不实现 web 的管理。

InterfaceRunner.java:package lu.tool.jar;

/**

* Created by xiaozi on 11/29/14.

*/

public interface InterfaceRunner {

public void fire();

}

Loader.javapackage lu.tool.jar;

import java.io.*;

import java.net.URL;

import java.net.URLClassLoader;

/**

* Created by xiaozi on 11/29/14.

*/

public class Loader {

public static void main(String[] args) {

String configFile = System.getProperty("jar.conf");

if (configFile == null || configFile.isEmpty()) {

System.exit(1);

}

System.out.println(configFile);

File file = new File(configFile);

try {

BufferedReader in = new BufferedReader(new FileReader(file));

String s;

while ((s = in.readLine()) != null) {

if (s.isEmpty()) continue;

System.out.println(s);

URL url = new URL(s);

URLClassLoader myClassLoader = new URLClassLoader(new URL[] {url}, Thread.currentThread().getContextClassLoader());

Class> myClass = myClassLoader.loadClass("lu.tool.jar.Runner");

InterfaceRunner action = (InterfaceRunner) myClass.newInstance();

// 达到指定条件的时候触发,这里仅是个演示

// 在没有优先级的执行条件下应该使用子进程的方式,防止其中的一个crash掉

action.fire();

myClassLoader.close();

System.out.println("done");

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (InstantiationException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

}

}

}

jar.conf 存放 jar 的本地的绝对路径file:///Users/xiaozi/Documents/testrunner/out/artifacts/testrunner_jar/testrunner.jar

被挂载jar包中的类实现package lu.tool.jar;

/**

* Created by xiaozi on 11/29/14.

*/

public class Runner implements InterfaceRunner {

@Override

public void fire() {

System.out.println("Hello, I'm in another jar!");

}

}

java动态打jar包_java动态加载jar包相关推荐

  1. java spring包_java 自定义加载器,加载spring包,动态加载实现,jar包隔离,tomcat加载webapp方式...

    java 自定义加载器,加载spring包,动态加载实现,jar包隔离,tomcat加载webapp方式 发布时间:2018-08-20 12:02, 浏览次数:774 , 标签: java spri ...

  2. java做windows屏保_java编程加载窗口,制作动画(屏保泡泡)

    1.整体的结构图: 2.编写GameFrame02.java代码: package cn.bjsxt.test; import java.awt.Frame; import java.awt.Grap ...

  3. 【Unity_AssetBundle】(四)什么是依赖?怎样加载依赖包?

    1.什么是依赖? 概念: 在包中的一个对象资源,如果关联了另一个对象资源 会自动把另一个资源打在同一个包中 例: 现有一个Cube: 已经把他打入名为"model"的AB包中 现在 ...

  4. flink sql udf jar包_Java动态加载Jar实例解析

    导读:在实际项目开发中,有时会遇到需动态加载jar包的应用场景.如将Flink的UDF自定义方法制作成方法库(既打成一个Jar),在提交给Flink集群的Job中动态加载jar便可使用.下面将举一个简 ...

  5. java程序动态加载jar包,并调用其中的方法

    再编写Java应用程序的时候我们通常需要动态的加载jar,具体的代码如下: demo1.jar中的invoke方法: package com.amx.test;   public class Test ...

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

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

  7. Java动态加载jar及class文件

    经常碰到需要动态加载jar及class文件的场景.Java类由于需要加载和编译字节码,动态加载class文件较为麻烦,但JDK仍提供了一整套方法来动态加载jar文件和class文件. 一.动态加载ja ...

  8. java动态加载jar时,jar中还有第三方jar无法加载的解决方法

    java动态加载jar时,jar中还有第三方jar无法加载的解决方法 当java插件化开发时,即一个java程序在运行的情况下动态加载另一个jar,网上大多数的方法如下 public static v ...

  9. 动态加载jar包(一)

    一.编写被调用的类 package com.qunar.helloworld;public class HelloWorld {public String sayHello(){return (&qu ...

  10. android动态jar,Android动态加载Jar(包含第三方依赖Jar)

    最近项目有一个需求,需要根据用户需求动态加载APP内某功能模块,且当该部分功能模块代码有变动,只需更新该功能JAR,无需更新整个APK,基于这个需求,决定采用动态加载Jar的方式去实现,于是各种查资料 ...

最新文章

  1. IE条件注释和CSS Hacks
  2. 移动WEB的页面布局
  3. C++总结笔记(七)—— 运算符重载
  4. spring总结_Spring综合课程总结
  5. python脚本编程实例_C程序调用Python脚本的例子
  6. python下拉菜单_自定义Django Form中choicefield下拉菜单选取数据库内容实例
  7. 一个游戏大量合服代表什么_一个女人哭了代表什么?这几点帮你分析
  8. pytorch nonzero_[深度学习框架]PyTorch常用代码段
  9. .net Remoting与Web Service的比较
  10. 你妈咪喊你回家刷题~~
  11. 计算机里的硬盘分区,Disk Genius对电脑硬盘分区的详细步骤
  12. 简书计算机组成原理知识点梳理,指令:计算机的语言(MIPS) --计算机组成原理(2)...
  13. 赛扬J4105和赛扬N5095哪个好
  14. MySQL数据备份和导入
  15. NFT新范式,OKALEIDO创新NFT聚合交易生态
  16. 秒杀产品总是抢不到?抢单助手来报道
  17. 模拟电路3(三极管及其基本放大原理)
  18. 通过实现25个数组方法来理解及高效使用数组方法(长文,建议收藏)
  19. shopify 插件开发
  20. ElasticSearch第三讲 ES-docker-Compose集群部署证书认证

热门文章

  1. Centos配置yum为阿里源
  2. C ++基本输入/输出
  3. 2D池化IPoolingLayer
  4. NSight Compute 用户手册(上)
  5. 编译器架构Compiler Architecture(下)
  6. 高精地图中导航标识识别
  7. 深度学习常见问题解析
  8. HarmonyOS 修改App的默认加载的界面
  9. 解剖JavaScript中的null和undefined
  10. CSS单位分析及CSS颜色表示法、颜色表(调色板)