如何定位一个class所在位置?
在J2EE应用开发中,应用所依赖类库是应用开发部署阶段需要考虑的重要因素。由于某些底层类库如Servlet API,JDBC Driver, JTA等已经包含在某些应用服务器中,开发阶段所依赖类库并不一定是运行时所必需的。这个依赖管理增加了复杂度,加上有时对应用的管理不善,经常会遇到在 开发环境正常运行的应用到了生产环境就出现java.lang.ClassNotFoundException或 java.lang.NoClassDefFoundError这样的异常或错误。此时,如果不了解应用的依赖关系,且应用的依赖关系比较复杂,了解某个 具体的class所在位置就显得尤为重要。Java的Class类里正好提供了这样功能,这个方法是getResource()。这个方法接受一个相对路 径名称,返回一个表示该资源绝对位置的URL对象。比如某个应用依赖于javax.transaction.TransactionManager类,要 了解该类所在jar文件位置可以用下面代码:
??? public void init() throws ServletException {
??????? ......
??????? URL url = this.getClass().getResource("/javax/transaction/TransactionManager.class");
??????? System.out.println("$$$$$$$$$$$ " + url);
??????? ......
??? }
上述代码是HttpServlet的初使化代码,在Tomcat 4.1.31中应用启动后,标准输出会打出
$$$$$$$$$$$ jar:file:<path_tomcat_home>/common/lib/jta.jar!/javax/transaction/TransactionManager.class
其 中<path_tomcat_home>和Tomcat安装的具体位置有关,从上述输出中可以知道 javax.transaction.TransactionManager类是从Tomcat的common/lib目录下的jta.jar文件的 /javax/transaction/TransactionManager.class Java类文件中加载的。可见通过该方法可以迅速的定位到class所在具体位置,这对解决 java.lang.ClassNotFoundException或java.lang.NoClassDefFoundError这样的异常或错误是 个有效的诊断手段。 1 楼 抛出异常的爱 2006-12-15 main,junit那种用什么方法呢?
2 楼 schnell18 2006-12-15 main很显然在main函数中插一段上述代码。junit可以在setUp中吧