6

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

这个问题:如何找出使用过的 JAR?

指向这个:如何分析Java程序中使用的是哪个jar文件?

它建议java使用参数调用可执行文件-verbose:class,但如果这在这里有用,那么在项目在我的本地 WAS 6.0 上运行的情况下,我该怎么做?

这个问题似乎更指向了正确的方向:如何找到类加载器加载哪些 jars 以及以什么顺序加载?

但是,我不熟悉类加载器是如何工作的,如何判断我的类加载器实例是什么(回复表明URLClassLoader有一个getURLs()提供对 jars/目录列表的访问的方法),以及我的类加载器实例是否不是 URLClassLoader,我从那里去哪里?

4

4 回答 4

4

打开详细的类加载(由 dims 建议)

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

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

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

本演示文稿很好地介绍了事物在 WebSphere 环境中的工作方式。

高温高压

芒鲁

于 2012-04-21T02:02:28.833 回答
2

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

于 2012-04-20T17:00:32.850 回答
1

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

于 2012-04-20T13:55:50.377 回答
1

这个问题的通用答案可能很棘手。由于 Java 动态加载类,一些 jars/类可能不会被加载,除非你的程序的所有功能都被执行(想想 Class.forName("foo") 作为一个简单的例子)。因此,任何类型的静态依赖分析都可能无法呈现 100% 完整的画面,您可能必须在应用程序执行时分析正在运行的应用程序,最好是点击所有代码分支。

作为粗略的第一个近似值,要查看是否有根本没有打开的 jar,您可以尝试查看应用程序运行时操作系统(Unix 上的“lsof”)报告的 webSphere 进程的打开文件列表. 如果 jar 没有被列为已打开,则很好地表明它没有被加载/使用,但反向不是必需的,因为 Websphere 可以扫描 jar 以获取注释等。

于 2012-04-20T14:03:13.067 回答