Java自动加载程序目录下的jar包

Java有个比较傻的地方,没有提供从程序目录加载jar包的功能,包括class-path等的配置,全部基于【相对于当前工作目录路径】和【绝对路径】两种,并没有【相对于程序路径】。

网上找了一些资料,东拼西凑把这个功能实现了。在需要的时候调用即可。

1package example.autoload; 2 3import java.io.File; 4import java.lang.reflect.Method; 5import java.net.URL; 6import java.net.URLClassLoader; 7 8public class Utils { 9 public static String getApplicationFolder() { 10 String path = Utils.class.getProtectionDomain().getCodeSource().getLocation().getPath(); 11 return new File(path).getParent(); 12 } 13 14 public static void loadJarsFromAppFolder(String sub_folder) throws Exception { 15 String path = getApplicationFolder() + File.pathSeparator + sub_folder; 16 File f = new File(path); 17 if (f.isDirectory()) { 18 for (File subf : f.listFiles()) { 19 if (subf.isFile()) { 20 loadJarFile(subf); 21 } 22 } 23 } else { 24 loadJarFile(f); 25 } 26 } 27 28 public static void loadJarFile(File path) throws Exception { 29 URL url = path.toURI().toURL(); 30 URLClassLoader classLoader = (URLClassLoader) ClassLoader.getSystemClassLoader(); 31 Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class); 32 method.setAccessible(true); 33 method.invoke(classLoader, url); 34 } 35} 36 37 38package example.autoload; 39 40public class test { 41 42 public static void main(String[] args) { 43 try { 44 Utils.loadJarsFromAppFolder("lib"); 45 } catch (Exception e) { 46 e.printStackTrace(); 47 } 48 } 49 50}
点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java Compiler API

在早期的版本中(JavaSE5及以前版本)中只能通过tools.jar中的com.sun.tools.javac包来调用Java编译器,但由于tools.jar不是标准的Java库,在使用时必须要设置这个jar的路径。而在JavaSE6中为我们提供了标准的包来操作Java编译器,这就是javax.tools包。编译java文件

springboot服务优雅关机脚本

阅读文本大概需要3分钟。自从使用springboot开发项目后,服务很多时候都是打成jar包,然后通过javajarxx.jar的方式来启动程序的。比如下面这个脚本就是启动payserver的脚本,加载prd配置文件,启动后在后台运行,将日志写在jar包目录下的pafa.log 里!/bin/bash eja

tongweb部署应用的时候出现java.lang.ClassNotFoundException处理办法

1:当通过tongweb部署应用的时候经常会遇到java.lang.ClassNotFoundException这种错误。2:当出现这种报错的时候代表应用缺少某个class文件,需要通过报错的具体的路径去寻找对应的jar包,找到之后放到%tongweb%/lib目录下面。例如:Causedby:java.lang.ClassNotFoundExceptio

Android动态加载基础 ClassLoader工作机制

类加载器ClassLoader早期使用过Eclipse等Java编写的软件的同学可能比较熟悉,Eclipse可以加载许多第三方的插件(或者叫扩展),这就是动态加载。这些插件大多是一些Jar包,而使用插件其实就是动态加载Jar包里的Class进行工作。这其实非常好理解,Java代码都是写在Class里面的,程序运行在虚拟机上

Java项目读取resources资源文件路径那点事

  今天在Java程序中读取resources资源下的文件,由于对Java结构了解不透彻,遇到很多坑。正常在Java工程中读取某路径下的文件时,可以采用绝对路径和相对路径,绝对路径没什么好说的,相对路径,即相对于当前类的路径。在本地工程和服务器中读取文件的方式有所不同,以下图配置文件为例: !(https://oscimg.oschina.net/o