在Tomcate中如何获取ClassPath的路径?

哈库纳 发布于 2013/08/22 19:38
阅读 2K+
收藏 3

在Web环境中使用这段代码
Enumeration<URL> eurls =Thread.currentThread().getContextClassLoader().getResource("org");

获取包含org包的ClassPath资源结果是错误的。

请问有没有人遇到这样的问题呀?

我是想使用这个功能扫描ClassPath中的类然后装载哪些 标记了特殊注解的类。

加载中
0
黄勇
黄勇

我刚在 Tomcat 7 下做过测试,代码如下:

Enumeration<URL> urls = Thread.currentThread().getContextClassLoader().getResources("org");
while (urls.hasMoreElements()) {
    URL url = urls.nextElement();
    System.out.println(url.getPath());
}
控制台输出:
file:/D:/Server/Tomcat/workspace/bin/bootstrap.jar!/org
file:/D:/Server/Tomcat/workspace/bin/commons-daemon.jar!/org
file:/D:/Server/Tomcat/workspace/bin/tomcat-juli.jar!/org
file:/D:/Server/Tomcat/workspace/lib/catalina-ant.jar!/org
file:/D:/Server/Tomcat/workspace/lib/catalina-ha.jar!/org
file:/D:/Server/Tomcat/workspace/lib/catalina-tribes.jar!/org
file:/D:/Server/Tomcat/workspace/lib/catalina.jar!/org
file:/D:/Server/Tomcat/workspace/lib/ecj-4.2.1.jar!/org
file:/D:/Server/Tomcat/workspace/lib/jasper-el.jar!/org
file:/D:/Server/Tomcat/workspace/lib/jasper.jar!/org
file:/D:/Server/Tomcat/workspace/lib/tomcat-api.jar!/org
file:/D:/Server/Tomcat/workspace/lib/tomcat-coyote.jar!/org
file:/D:/Server/Tomcat/workspace/lib/tomcat-dbcp.jar!/org
file:/D:/Server/Tomcat/workspace/lib/tomcat-i18n-es.jar!/org
file:/D:/Server/Tomcat/workspace/lib/tomcat-i18n-fr.jar!/org
file:/D:/Server/Tomcat/workspace/lib/tomcat-i18n-ja.jar!/org
file:/D:/Server/Tomcat/workspace/lib/tomcat-jdbc.jar!/org
file:/D:/Server/Tomcat/workspace/lib/tomcat-util.jar!/org
file:/D:/Demo/servlet_demo/target/servlet_demo/WEB-INF/lib/commons-beanutils-1.8.3.jar!/org
file:/D:/Demo/servlet_demo/target/servlet_demo/WEB-INF/lib/commons-collections-3.2.1.jar!/org
file:/D:/Demo/servlet_demo/target/servlet_demo/WEB-INF/lib/commons-dbcp-1.4.jar!/org
file:/D:/Demo/servlet_demo/target/servlet_demo/WEB-INF/lib/commons-dbutils-1.5.jar!/org
file:/D:/Demo/servlet_demo/target/servlet_demo/WEB-INF/lib/commons-lang-2.6.jar!/org
file:/D:/Demo/servlet_demo/target/servlet_demo/WEB-INF/lib/commons-logging-1.1.1.jar!/org
file:/D:/Demo/servlet_demo/target/servlet_demo/WEB-INF/lib/commons-pool-1.5.4.jar!/org
file:/D:/Demo/servlet_demo/target/servlet_demo/WEB-INF/lib/jackson-core-asl-1.9.13.jar!/org
file:/D:/Demo/servlet_demo/target/servlet_demo/WEB-INF/lib/jackson-mapper-asl-1.9.13.jar!/org
file:/D:/Demo/servlet_demo/target/servlet_demo/WEB-INF/lib/log4j-1.2.17.jar!/org
file:/D:/Demo/servlet_demo/target/servlet_demo/WEB-INF/lib/mysql-connector-java-5.1.25.jar!/org
file:/D:/Demo/servlet_demo/target/servlet_demo/WEB-INF/lib/xmlpull-1.1.3.1.jar!/org
file:/D:/Demo/servlet_demo/target/servlet_demo/WEB-INF/lib/xpp3_min-1.1.4c.jar!/org

说明:

Tomcat 路径:D:/Server/Tomcat/workspace/
应用发布路径:D:/Demo/servlet_demo/target/servlet_demo/

请问:这样的输出结果是正常的吗?

哈库纳
哈库纳
回复 @山哥 : 开发环境出问题了,引发了这个错误。
山哥
山哥
回复 @哈库纳 : 可以使用 System.getProperty("java.class.path") 来获取啊。
哈库纳
哈库纳
确定了,是公司环境问题引发的。
哈库纳
哈库纳
我先撤回刚刚发的解决问题的代码,以确保别误导大家。明天去单位看看是不是其他问题引发的。 不过上述代码确实解决了在单位遇到的问题。
哈库纳
哈库纳
正常的,刚刚在家我使用Tomcat6 Tomcat7 Jetty8 重新跑了一遍刚才的测试,现在来看也没有问题发生。 明天再去单位看看问题是不是出在其他地方。
0
n
newlife867
你得getSystemClassLoader
0
哈库纳
哈库纳

getSystemClassLoader获取的是Java JVM级别的 ClassLoader,我的资源是存在于 Web目录下。我试了换成SystemLoader之后还不如我那个,直接什么都都获取不到了。

0
黎明伟
黎明伟
https://github.com/limingwei/li
0
小翔
小翔
spring aop新增功能对自定义的annotation有很好的功能支持。
0
哈库纳
哈库纳
抱歉这个问题是出自于我正在编写的一个开源项目,这个项目并没有使用Spring相关技术。
0
小翔
小翔
关闭annotation有编译时的运行时,你用这总取java对class没有用吧
0
n
newlife867
.getResources("/org") 试试
0
jeff-qq
jeff-qq

Thread.currentThread().getContextClassLoader().getResource("").getPath();

getResource("");参数是一个空字符串

0
小翔
小翔
得到annotation一般是直接拿到class然后取method或其它东西,再看有没有annotation的
返回顶部
顶部