推荐给好友 上一篇 | 下一篇

Classpath工具


声明
  • 声明: 1、任何网站转载本站点内容时需注明来自JAVA-CN.COM,否则我们有权将根据《互联网著作权行政保护办法》追究其相应法律责任; 2、JAVA中文站社区刊登此文只为传递信息,并不表示赞同或者反对.
二、可能出现的问题
:?+`!])V$C
5V.@!C2|$ZI  不管他们是否愿意承认,初学者和富有经验的Java开发者都一样,他们都曾经在某些时候(通常是在那些最糟糕的情形下)被冗长、复杂的classpath欺骗。应用程序所依赖的第三方类和用户定义类的数量逐渐增长,classpath也逐渐成了一个堆积所有可能的目录和档案文件名的地方。此时,类装载器首先装载的究竟是哪一个类也就不再显而易见。如果classpath中包含重复的类入口,这个问题尤其突出。前面已经提到,类装载器总是装载第一个它在classpath中找到的具有合适名字的类,从实际效果看,它“隐藏”了其他具有合适名字但在classpath中优先级较低的类。
x^%a qW3d#G
6W$If4]K|  如果不小心,你很容易掉进这个classpath的陷阱。当你结束了一天漫长的工作,最后为了让应用程序使用最好、最新的类,你把一个目录加入到了classpath,但与此同时,你却忘记了:在classpath的另一个具有更高优先级的目录下,存放着该类的另一个版本! JAVA中文站社区门户{,X[e9u9d(q
JAVA中文站社区门户"Z?3a)epS2I0a
三、一个简单的classpath工具
c!X#m u*`H W-^4{XnJAVA中文站社区门户g ~+RRj}
  优先级问题是扁平路径声明方法与生俱来固有的问题,但它不是只有Java的classpath才有的问题。要解决这个问题,你只需站到富有传奇色彩的软件巨构的肩膀上:Unix操作系统有一个which命令,在命令参数中指定一个名字,which就会显示出当这个名字作为命令执行时执行文件的路径名。实际上,which命令是分析PATH变量,然后找出命令第一次出现的位置。对于Java的类路径管理来说,这应该也是一个好工具。在它的启发之下,我着手设计了一个Java工具JWhich。这个工具要求指定一个Java类的名字,然后根据classpath的指引,找出类装载器即将装载的类所在位置的绝对路径。
#Llqg-\
wEZ N?B O  下面是一个JWhich的使用实例。它显示出当Java类装载器装载com.clarkware.ejb.ShoppingCartBean类时,该类第一次出现位置的绝对路径名,查找结果显示该类在某个目录下: JAVA中文站社区门户xs#o6eR+N1kP

5eu2mf-R(t0W> java JWhich com.clarkware.ejb.ShoppingCartBean JAVA中文站社区门户p*KGe.\8d7`

\ w*r7F-r*n$GClass ´com.clarkware.ejb.ShoppingCartBean´ found in JAVA中文站社区门户 xA9rY0t'{IRP
´/home/mclark/classes/com/clarkware/ejb/ShoppingCartBean.class´
*e1nQ GQ~8B
[StN?Xhr  下面是第二个JWhich的使用实例。它显示出当Java类装载器装载javax.servlet.http.HttpServlet类时,该类第一次出现位置的绝对路径名,查找结果显示该类在某个档案文件中:
*_,@*h)veD-ec%r
#LB2t8F7]Rp> java JWhich javax.servlet.http.HttpServlet JAVA中文站社区门户0@}b"_%?XOZ\
JAVA中文站社区门户#Vwr;A*N1@3L@)n
Class ´javax.servlet.http.HttpServlet´ found in
V Ov@,G1S´file:/home/mclark/lib/servlet.jar!/javax/servlet/http/HttpServlet.class´  

TAG: Classpath CLASSPATH 工具
 

评分:0

我来说两句

seccode