我试图弄清楚总共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?
但是,我不熟悉类加载器的工作原理,如何判断我的类加载器实例是什么(回复表明URLClassLoader有getURLs()
方法提供对列表的访问罐子/目录),如果我的类加载器实例不是URLClassLoader,我从那里去哪里?
答案 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可以扫描罐子中的注释等。