0

我们有一个客户创建了一个 serverlet,要在 Windows 7 64 位的 JBOSS 7.1 中托管,并且该 serverlet 使用我们开发的 jar 文件中的 java 类。我们的一个类使用了 sun.awt.DisplayChangedListener 接口。问题是我们在调用servelet 时从使用DisplayChangedListener 的类中得到NoClassDefFoundError 异常,而DisplayChangedListener 是根本原因。与 DisplayChangedListener 所在的同一个 rt.jar 文件中的许多其他类没有问题。我使用进程资源管理器查看 JBOSS 进程加载的 jar 文件,那里只有一个 rt.jar 文件。如果我直接使用 java 运行相同的代码,我没有问题。如果我将 rt.jar 文件的副本放在 JBOSS 中已部署的 serverlet 应用程序的本地存储库中,也没有问题。我知道阳光下的课程。awt 命名空间不应该由开发人员在内部使用,而且 JBOSS 类加载器似乎加强了对其使用的限制。有没有什么办法可以让它在没有 rt.jar 的本地副本并且不放弃使用 DisplayChangedListener 接口的情况下工作(例如通过配置文件中的一些设置)?

提前感谢您的帮助。

4

1 回答 1

0

我推荐的步骤是:

  1. 创建一个新模块
  2. 添加以下依赖项(对您需要的包进行编辑)
    ...
       <依赖项>
       <系统出口=“真”>
         <路径>
           <path name="com/sun"/>
           <path name="com/sun/net/ssl/internal/ssl"/>
         </路径>
       </系统>
       <模块名称="javax.api"/>
       <module name="org.apache.log4j"/>
       <module name="sun.jdk" export="true"/>
     </依赖>

  1. 使您的应用程序依赖于模块。
于 2012-11-08T18:20:09.440 回答