0

我需要从 Tomcat 和 Websphere 服务器上的 Web 应用程序中获取使用的库的 jarNames。

我有这个代码:

public void libs(ActionEvent e){

    System.getProperty("java.class.path");

    try {
            Field ucp = this.getClass().getClassLoader().getClass()
                        .getSuperclass().getDeclaredField("ucp");

            ucp.setAccessible(true);

            Object valueUcp = ucp.get(this.getClass().getClassLoader());

            Field loaders = valueUcp.getClass().getDeclaredField("path");

            loaders.setAccessible(true);

            ArrayList collection = (ArrayList) loaders.get(valueUcp);

    } catch (Exception e) {

        e.printStackTrace();

    }

}

它适用于 Tomcat,但不适用于 websphere。

PS。对不起我的英语不好。

4

2 回答 2

1

没有可移植的 API 来获取此信息。在 WebSphere Application Server 上,ClassLoader.toString 通常包含用于诊断目的的完整类路径,但我绝对不建议尝试“解析”输出。我也不建议在 Tomcat 上使用反射:它可能适用于当前的 Tomcat 版本,但不能保证类加载器实现不会改变和破坏您的应用程序。

于 2013-08-14T21:27:43.963 回答
0

如果不需要以编程方式获取它,这就是我的建议。使用控制台中的类加载器查看器,它会为您提供所需的信息。

我建议您在测试环境中运行您的自动化测试用例,然后查看它,您将能够看到运行时加载的所有类以满足您的 Web 应用程序的需求。

我同意 fnt 关于写这些东西的必要性?如果您处于故障排除阶段并试图找到某种 NCDF 或 CNF 异常,那么使用 Class Loader Viewer 的方法会很有帮助。此外,查看 native_stderr.log 中的详细类加载器输出将对故障排除活动有很大帮助。

HTH芒鲁

于 2013-08-15T00:15:09.787 回答