关于classloader .getResource 方法。

lifigure 发布于 2012/09/04 08:43
阅读 787
收藏 0

一个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 文件下的资源。

盼解答!

加载中
0
l
lifigure
我顶 没人回答
0
鉴客
鉴客

不同的 ClassLoader 导致哦

Thread.currentThread().getContextClassLoader(); 的 ClassLoader 跟 Test.jar 的 ClassLoader 不同就会出现你说的问题
0
l
lifigure
我是做单元测试 ,这2个classloader 应该都是appClassloader 啊,、
返回顶部
顶部