关于classloader .getResource 方法。
一个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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我是做单元测试 ,这2个classloader 应该都是appClassloader 啊,、
不同的 ClassLoader 导致哦
Thread.currentThread().getContextClassLoader(); 的 ClassLoader 跟 Test.jar 的 ClassLoader 不同就会出现你说的问题
我顶 没人回答