关于classloader .getResource 方法。

发布于 2021-11-17 06:55:47 字数 2441 浏览 798 评论 3

一个eclipse 工程 maven 构建,其中个别jar 包不是所以就用 附加包的形式加入系统。

见.classpath 文件

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
	<classpathentry including="**/*.java" kind="src" output="target/zx/WEB-INF/classes" path="src/main/java"/>
	<classpathentry kind="src" path="src/main/process"/>
	<classpathentry excluding="**" kind="src" output="target/zx/WEB-INF/classes" path="src/main/resources"/>
	<classpathentry excluding="**" kind="src" output="target/zx/WEB-INF/classes" path="src/main/config"/>
	<classpathentry excluding="**" kind="src" output="target/zx/WEB-INF/classes" path="src/main/scripts"/>
	<classpathentry including="**/*.java" kind="src" output="target/test-classes" path="src/test/java"/>
	<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"/>
	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
		<attributes>
			<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
		</attributes>
	</classpathentry>
	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
		<attributes>
			<attribute name="owner.project.facets" value="java"/>
		</attributes>
	</classpathentry>
	<classpathentry kind="lib" path="src/main/webapp/WEB-INF/lib/test.jar"/>
	<classpathentry kind="output" path="target/zx/WEB-INF/classes"/>
</classpath>

我附加的包是test.jar

现在 我做test 

	@Test
	public void testFromJar2() {
		ClassLoader cl=Thread.currentThread().getContextClassLoader();
		URL u=cl.getResource("com/icom"); // com.icom 是我工程包
		Object c;
		Assert.assertNotNull(u);
		u=cl.getResource("net/sf"); // 我通过maven 引入的ehcache 包
		Assert.assertNotNull(u);
		u=cl.getResource("com/icom/diagrams/assignWork3/");// 我test.jar 引入的包
		Assert.assertNull(u);
		
		
		
	}

问题是 我test.jar 中的包 就是这样找不到资源,如果资源不是个目录 ,而是具体的文件比如一个.class 就可以找到。但maven 下加载来的jar 目录也可以找到。

最初以为问题出在工程的配置上,我就发布到tomcat 下,那样都在web-inf/lib 目录下就无差别了吧。但问题依旧!

实在是找不出问题原因了,因为我要使用spring 的PathMatchingResourcePatternResolver 匹配资源,这个问题解决不了,我就匹配不了 我自己jar 文件下的资源。

盼解答!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

猫九 2021-11-20 09:39:24

我是做单元测试 ,这2个classloader 应该都是appClassloader 啊,、

拍不死你 2021-11-20 08:35:54

不同的 ClassLoader 导致哦

Thread.currentThread().getContextClassLoader(); 的 ClassLoader 跟 Test.jar 的 ClassLoader 不同就会出现你说的问题

归途 2021-11-19 10:51:36

我顶 没人回答

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文