如何确定实际使用的JAR?

时间:2012-04-20 13:45:36

标签: spring java-ee dependencies websphere classloader

我试图弄清楚总共83个JAR中的哪些JAR库实际上被一组12个Java EE / Spring项目使用。所有JAR都属于一个EAR。开发在Eclipse中完成,构建工具是Ant。所有项目都在WebSphere Application Server 6.0上运行。

这个问题:How to figure out used JARs?

指向这一个:How to analyse which jar file is used in a Java program?

建议使用java参数调用-verbose:class可执行文件,但如果这在此处有用,如何在我的本地WAS 6.0上运行项目时如何执行此操作?< / p>

这个问题似乎指向更正确的方向:How to find which jars and in what order are loaded by a classloader?

但是,我不熟悉类加载器的工作原理,如何判断我的类加载器实例是什么(回复表明URLClassLoadergetURLs()方法提供对列表的访问罐子/目录),如果我的类加载器实例不是URLClassLoader,我从那里去哪里?

4 个答案:

答案 0 :(得分:2)

对于WebSphere 6.1,您可以使用“-verbose:dynload”选项(请参阅WebSphere Application Server V6.1: Classloader Problem Determination Redbook的第52页)。您将在native_stderr.log

中看到输出

答案 1 :(得分:2)

启用详细类加载(如dims所示)

查看管理控制台,您将看到一个类加载器查看器,它会显示所需的信息。

类加载器具有用于加载类的标准层次结构。

看看这个: http://www-01.ibm.com/support/docview.wss?uid=swg27023549&aid=1

本演示文稿为您介绍了WebSphere环境中的工作原理。

HTH

Manglu

答案 2 :(得分:1)

您可以尝试使用http://www.jboss.org/tattletale之类的内容。这可以告诉你哪些罐子没有被使用。

答案 3 :(得分:1)

这个问题的通用答案可能很棘手。由于Java动态加载类,因此可能不会加载某些jar /类,除非执行程序的所有功能(将Class.forName(“foo”)视为简单示例)。因此,任何类型的静态依赖性分析都可能无法提供100%完整的图片,您可能必须在执行时分析正在运行的应用程序,最好是访问所有代码分支。

作为一个粗略的初步近似,看看是否有根本没有打开的jar,你可能会尝试查看webSphere进程的打开文件列表,正如你的操作系统(Unix上的“lsof”)所报告的那样。应用程序正在运行如果jar没有被列为打开,那么很好地表明它没有被加载/使用,但反过来并不必要,因为Websphere可以扫描罐子中的注释等。