URLClassLoader中指定目录和jar的问题

测试用的是jdk1.6.0_16. 项目的结构图:

  
                                

src:源码

classes:编译后的文件

lib:junit

urlclassloaderpath:测试过程中要从这里加载类

编译和运行(都是在classloader目录下):

编译:javac -encoding utf-8 -d classes -cp lib\junit-4.7.jar src\urlclassloader\URLClassLoaderTest.java
运行:java -cp classes;lib\junit-4.7.jar org.junit.runner.JUnitCore urlclassloader.URLClassLoaderTest

 

 

问题的来源,先看下面的code:

 

try {
	System.out.println("==========test2=========");
	URL[] urls = new URL[] {
			new URL("file:/" + System.getProperty("user.dir") + "/urlclassloaderpath")
			// new URL("file:/" + System.getProperty("user.dir") + "/urlclassloaderpath/")
	};
	
	for(URL u : urls) {
		System.out.println(u.toString());	
											
	}
	
	URLClassLoader ul = new URLClassLoader(urls);

	Class<?> c = ul.loadClass("hello.HelloWorld");
	System.out.println(c);

	c = ul.loadClass("urlclassloader.test.Test");
	System.out.println(c);
	System.out.println("==========test2=========" + rt);
} catch (Exception e) {
	System.out.println("test2():" + e + rt);
}

上面的意思就是从urlclassloaderpath下加载hello.HelloWorld这个类, 目录下也的确存在hello包和HelloWorld类。如果使用的是:new URL("file:/" + System.getProperty("user.dir") + "/urlclassloaderpath"),那么运行的时候会出现异常:java.lang.ClassNotFoundException。如果使用的是:new URL("file:/" + System.getProperty("user.dir") + "/urlclassloaderpath/") 则是OK的。郁闷的地方来了,指定classes目录时,无论是否在最后加"/"都是没有问题的,换成urlclassloaderpath目录怎么就不行了?

 

可以先查看一下URLClassLoader类的API(中文的), 是这么说的:该类加载器用于从指向 JAR 文件和目录的 URL 的搜索路径加载类和资源。这里假定任何以 '/' 结束的 URL 都是指向目录的。如果不是以该字符结束,则认为该 URL 指向一个将根据需要打开的 JAR 文件。

不过从运行的结果来看,貌似不是很对。

 

再看刚刚那个程序, 下面还加载了:c = ul.loadClass("urlclassloader.test.Test"); 在URL中我们并没有指定classes目录, 但是加载urlclassloader.test.Test缺少没有任何问题的。其实这里可以这么思考下:运行的时候指定的classpath是classes,那么从这个目录下加载当然是没有问题的。这样的话就能够说的通了。

 

 

再来看下加载jar包中的类. 只是指定了目录,而没有指定具体的jar包。

		try {
			URL[] urls = new URL[] {
					new URL("file:" + System.getProperty("user.dir") + "/classes/")
			};
			
			for(URL u : urls) {
				System.out.println(u.toString());
			}	
			
			// 从jar文件中加载一个类
			URLClassLoader ul = new URLClassLoader(urls);
			Class<?> c = ul.loadClass("test.classpath.jar.ClasspathJarFile");
			
			System.out.println(c);	
			System.out.println("==========test=========" + rt);
		} catch (Exception e) {
			System.out.println("test() : " + e + rt);
		}

运行上面的程序,报的是java.lang.ClassNotFoundException。 如果改成:

new URL("file:" + System.getProperty("user.dir") + "/classes/classpath.jar")

   指定了具体的jar包,则是没有问题的。

其实这个和我们的命令行差不多,在我们指定-cp的时候必须要指定具体的jar包,而不能只指定目录。

完整的测试程序见附件或者https://github.com/yklovejava/yklovejava/tree/master/jvm/classloader

 

总结:测试完后就明白了

 

模式分类识别 | TCN时间卷积神经网络多特征分类预测(Matlab完整程序) 阅读详情

相关推荐

Uncertainty-Aware Mean Teacher(UA-MT)

本文提出了一种新的基于不确定性的半监督学习框架(UA-MT),通过额外利用未标记的数据从3D MR图像中分割左心房。具体地说,本文建立了一个教师模型和一个学生模型,学生模型通过最小化标注数据上的分割监督损失和所有输入数据上的与教师模型预测输出的一致性损失进行优化。如果没有未标记输入中的注释,教师模型的预测目标可能不可靠且有噪声。:在估计不确定性 U 的指导下,我们过滤掉相对不可靠**(高不确定性),整个体积** U 的不确定性**是 {u} ∈ RH×W ×D。过滤掉高不确定性的,也就是熵大于某个值的。

Alexa_的博客 1871

URLClassLoader 加载同名类

URLClassLoader作为最常用、使用最广泛的类加载器,在java世界中扮演着举足轻重的角色。问题还是出在类加载器身上,由于双亲委托机制的存在,对于包含相同类名的jar包,class类实例只会选择优先被加载的jar包,后者则会被无视。一般的,系统类加载器是AppClassLoader,当然也可以通过jvm选项Djava.system.class.loader。一般通过在URLClassLoader的类构造器中指定URL数组来初始化路径的加载,当然也可以使用反射的方式来动态加载路径。

weixin_38526093的博客 1670

安装matlab_Matlab+yalmip+cplex安装教程及算例

数学建模/科研学习推荐学习软件:Matlab+yalmip+cplex安装教程及算例其实绝大多数本科生都是在用Matlab和LINGO求解优化问题,Matlab可以求解一般优化问题,但是当优化问题规模比较大或者在应对一些非线性问题时候,Matlab会出现求解时间长,求解效率低,甚至难以求解等问题。Matlab+yalmip+cplex是Matlab通过调用商业软件cplex求解,求解时间短,这里简...

weixin_28939637的博客 5008

URLClassLoader详解

翻译过来就是类加载器,普通的java开发者其实用到的不多,但对于某些框架开发者来说却非常常见。理解ClassLoader的加载机制,也有利于我们编写出更高效的代码。ClassLoader的具体作用就是将class文件加载到jvm虚拟机中去,程序就可以正确运行了。但是,jvm启动的时候,并不会一次性加载所有的class文件,而是根据需要去动态加载。想想也是的,一次性加载那么多jar包那么多class,那内存不崩溃。本文的目的也是学习ClassLoader这种加载机制。。

qq_43985303的博客 4529

新入手的Atmel-ICE产品说明

【一句话自我介绍】 我是Atmel最新推出的功能强大的调试编程工具,适用于Atmel ARM® Cortex®-M的Atmel SAM和AVR® 系列芯片。 【我支持的软件】 完美支持Atmel Studio 6.2以上版本直接支持ICC8AVR以上版本支持烧录ICCAVR、CVAVR、IAR等生成的HEX文件 【我支持的器件】 支持AVR 32-bit MCUs的JTA

kaloha3的专栏 1万+

RK3568开发笔记- (TX/RX) RGMII delayline 功能调试

本文详细介绍了RK3568芯片RGMII接口delayline功能的调试过程。针对千兆以太网通信不稳定问题,通过分析RGMII时序要求,利用RK3568内置的delayline功能补偿信号延迟。调试方法包括扫描delayline窗口、测试中间值配置、优化硬件设计等步骤。文章还总结了常见问题解决方案,如PHY选型建议和自动扫描功能配置。最终实现了千兆速率下丢包率降至0.01%以下的目标,为类似开发场景提供了实用参考。

flypig has a dream! 318

如何用URLClassLoader来加载一个指定目录下的class类

直接插入我的代码: public class ServletProcessor1 { public void process(Request request, Response response) { // TODO Auto-generated method stub String uri = request.getUri(); System.out.println(...

iteye_4939的博客 608

YOLO26剪枝 lamp剪枝测试精度仅掉0.7个点,速度提高11.8fps!

针对没有如何去选择剪枝的内容LAMP是层自适应幅度调整剪枝,无需任何参数,通过算法内部自己计算每个层的重要程度进行剪枝。基于权重重要程度和该层权重大小关系,权重越大表明该层越重要的思想进行优化。这个跟我前面说的非结构化全局剪枝是一个解法(MP),也就是lamp是在我前面那个非结构化剪枝的基础上进行优化的。但是这个逐层进行非结构剪枝目前还没有一个清晰的概念,确定每个层要剪枝多少。LAMP得分是一个平方权重大小,由层中所有“幸存权重”的总和归一化。

m0_64661770的博客 675

使用URL存取jar文件的例子

package net.java2000.net;import java.io.IOException;import java.net.JarURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.jar.JarEntry;import java.util.jar.JarFil

老紫竹的专栏 8187

复现报告:《多回路人机控制系统仿真及II型PIO分析》方法复现与代码实现

本文复现了谭文倩硕士论文《多回路人机控制系统仿真及II型PIO分析》中的关键方法,重点实现了频域驾驶员模型辨识和参数灵敏度分析。通过数字化提取论文图表数据,构建了结构驾驶员模型传递函数,并验证了参数变化对系统特性的影响。采用MATLAB实现了描述函数计算、模型参数辨识和灵敏度分析算法,为后续神经网络模型辨识和II型PIO研究奠定了基础。由于缺乏原始实验数据,部分结果通过数值模拟获得,但仍有效重现了论文的核心分析方法。~~~~~

huanghm88的专栏 178

SI案例分享--考虑ESD保护二极管的差分线阻抗仿真

PCB设计中的cut out参考面早已是SI评估中常用的阻抗优化方式,通过合理的仿真建模,可以提供合适的设计参考,并保持与测试结果的高度一致性。

一只豌豆象的博客 1438

URLClassLoader 读取任意目录下的class

public static void main(String[] args) throws IOException, ClassNotFoundException { try { URL[] urls = new URL[] { new URL("file:/" + System.getProperty("user.dir") + "/webroot/") };

lrenjundk的专栏 2294

UNet 改进(39):结合残差连接与CBAM注意力机制的unet模型

本文提出了一种改进的UNet架构,通过融合残差连接和CBAM注意力机制来增强医学图像分割性能。该网络保留UNet的U形结构,但将基础模块替换为ResidualBlock和CBAM的组合:残差块通过快捷连接解决梯度消失问题,CBAM模块结合通道和空间注意力机制突出重要特征。整体架构采用编码器-解码器设计,包含5个下采样和上采样阶段,通过跳跃连接融合多尺度特征。实验表明,这种改进显著提升了原始UNet的性能,特别适用于需要精细边界的医学图像分割任务。

2401_82355416的博客 1040

java 如何读取jar包内资源文件_读取Jar包下的资源文件以及指定文件的解决方案...

Jar文件是一种归档文件,里面包含了一堆Class文件,以及Resouce文件,File是文件资源的统称Jar file的结构,包含了META-INT,properites,以及resource资源。普通获取一个文件的方式为:File file = new File(path)这在文件系统中,运行起来的是没有问题。但当你的代码以Jar的方式去运行的时候,Resources作为源文件打包后其下的文件...

weixin_34183702的博客 3922

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java URLClassLoader动态加载jar包详解

Java URLClassLoader动态加载jar包详解 【下载地址】JavaURLClassLoader动态加载jar包详解 Java URLClassLoader 是一个强大的工具,用于从指定的 URL 路径动态加载 JAR 文件和目录中的类与资源。它特别适合需要在运行时动态扩展功能的场景,例如插件系统或模块化应用...

gitblog_06792的博客 427

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

通过URLClassLoader实现动态加载指定路径下所有Jar

package test.tool.gui.dbtool.util; import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; import org.apache.log4j.Logger; import test.to

水工鸟的专栏 4170

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

URLClassLoader加载远程jar包

背景 有一个网友看了我的《Flink的classLoader加载机制(推测)-- 记一次程序问题中的探索》这篇文章,向我提问了一个问题,虽然这个问题我没有解决,但是我打算做一个小实验来验证一下解决思路的可行性。问题如下: 实验 因为我现在没有一套随便实验的flink集群,也没有阿里云的oss,所以就只好做个最简单的实验,证明我是可以从远程加载jar包然后使用jar包中的类的。 首先,需要先创建一个maven工程,创建一个类叫...

lijianqingfeng的专栏 4082

URLClassLoader源码分析。

/** * 该类加载器用于从指向 JAR 文件和目录的 URL 的搜索路径加载类和资源。 * 这里假定任何以 '/' 结束的 URL 都是指向目录的。 * 如果不是以该字符结束,则认为该 URL 指向一个将根据需要打开的 JAR 文件。 * 创建 URLClassLoader 实例的 AccessControlContext 线程将在后续加载类和资源时使用。 * 为加载的类默认授予...

孤芳不自赏 1423

java classloader 路径_通过URLClassLoader实现动态加载指定路径下所有Jar

package test.tool.gui.dbtool.util;import java.io.File;import java.net.MalformedURLException;import java.net.URL;import java.net.URLClassLoader;import org.apache.log4j.Logger;import test.tool.gui.dbtoo...

weixin_42573757的博客 636

URLClassLoader 加载类

URLClassLoader是ClassLoader的子类,它用于从指向 JAR 文件和目录的 URL 的搜索路径加载类和资源。也就是说,通过URLClassLoader就可以加载指定jar中的class到内存中。   Java代码    package hb.classloader;      import java.io.File;   import java.lang.refl...

hanjungua8144的博客 2625

URLClassLoader使用方法及事例程序

使用概要:   File   file   =   new   File(jar文件全路径);      URL   url   =   file.toURL();      URLClassLoader   loader   =   new   URLClassLoader(new   URL[]   {   url   });      Class   tidyClazz

Athenaer的专栏 786

2. URLClassLoader

1. URLClassLoader URLClassLoader用于加载jar包、目录指定的类、资源。 2. 应用 public class Main2 { public static void main(String[] args) throws Exception { String path = "D:/"; File file = new File(path); URL url = file.toURL(); URLClassL

Mustang 295

类加载器和URLClassLoader

Java 类加载采用java.lang:由 JVM 原生代码实现(C++)目录下的核心类库(如:是所有类加载器的父加载器,无法被 Java 代码直接引用目录下的扩展类库:继承自classpath(默认由实现)classpath环境变量指定的路径:是应用程序的默认类加载器。

510

URLClassLoader

仔细查看后发现file:/E:/work/4AMLA/code/slf4jFresh/target/slf4jFresh-1.0-SNAPSHOT.jar包中的MANIFEST.MF文件中包含的classpath中包含了fastjson相关的jar包,并这些jar包也在相应的位置。Class.forName("com.alibaba.fastjson.JSON",true,urlClassLoader)没有把报错,可以成功加载JSON.class文件,比较费解。其中不包括json的相关的的jar,但是。

赵发财 551

java指定目录下的jar加到classloader中

List&lt;URL&gt; libUrls = new ArrayList&lt;URL&gt;(); // contract依赖的所有jar,加到classloader的classpath中 File libPath = new File(Const.ROOT_TESTCASES_PATH + File.separator + Const.SERVICE_PREFIX + serviceNa...

ssshen14的专栏 1131

URLClassLoader加载class到当前线程类加载器

 我们知道,Java利用ClassLoader将类载入内存,并且在同一应用中,可以有很多个ClassLoader,通过委派机制,把装载的任务传递给上级的装载器的,依次类推,直到启动类装载器(没有上级类装载器)。如果启动类装载器能够装载这个类,那么它会首先装载。如果不能,则往下传递。当父类为null时,JVM内置的类(称为:bootstrap class loader)就会充当父类。想想眼下的越来越

夏天的专栏 3169
上一篇: Eclipse和DOS下运行程序的差异(主要涉及user.dir和classpath的问题)
下一篇: FusionCharts制作实时刷新图
yklovejava
博客等级 码龄14年 0粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值