如何在像Tomcat和WAS这样的java web服务器上获取应用程序库(jarNames)?

如何在像Tomcat和WAS这样的java web服务器上获取应用程序库(jarNames)?,java,tomcat,websphere,classloader,libs,Java,Tomcat,Websphere,Classloader,Libs,我需要从Tomcat和Websphere服务器上的web应用程序中获取所用库的名称 我有以下代码: public void libs(ActionEvent e){ System.getProperty("java.class.path"); try { Field ucp = this.getClass().getClassLoader().getClass() .getSuperclass().get

我需要从Tomcat和Websphere服务器上的web应用程序中获取所用库的名称

我有以下代码:

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上工作


对不起,我的英语不好。

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

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

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

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


Manglu

究竟为什么需要这个?可能对报告的故障排除很方便。我需要向用户显示jar版本我需要以编程方式这样做,因为我正在构建一个应用程序,向用户显示应用程序的jar版本。我只是通过反射为每台服务器构建一个解决方案,但是如果类加载器被改变,我真的会有问题。我正在寻找一个更好的替代方案,但现在我认为我必须使用它。我强烈建议不要使用反射来访问应用服务器的内部。那将是一场维护噩梦。