如何在Tomcat和WAS等Java Web服务器上获取应用程序库(jarNames)?

时间:2013-08-13 18:36:06

标签: java tomcat websphere classloader libs

我需要在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。对不起我的英文不好。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

我同意fnt有什么需要写这样的东西?如果您正处于故障排除阶段并尝试查找某种NCDF或CNF异常,那么使用类加载器查看器的方法将会有很大帮助。另外,在native_stderr.log中查看详细的类加载器输出将在故障排除活动中提供巨大的帮助。

HTH Manglu