JBoss - 战争库依赖

use*_*083 2 java jboss

我正在尝试添加一些依赖jar文件.但是这些文件放入lib/endorsedWEB_INF/lib.jar导致jboss实例的启动错误.我想这是因为JBoss的平面类加载器结构.如果有人在中实现了类加载器设置jboss-web.xml

<class-loading> 
      <loader-repository>com.example:archive=unique-archive-name</loader-repository> 
</class-loading>
Run Code Online (Sandbox Code Playgroud)

有人可以给我一个真实的例子吗?

另外我应该在哪里放置这些jar文件 - lib/endorsedjboss,或lib文件夹在deploy文件夹中或WEB_INF/lib

Nic*_*las 5

Duffymo关于不让罐装背书的指令被忽略了,这是你的危险所在.

在一些额外的细节:

在您的WEB-INF/lib中放置库是可移植性和一致性的最佳实践,因为它遵循创建自给自足和可分发的Web存档的标准规定,但您需要密切关注类加载声明您是放入你的jboss-web.xml.

假设一个简单的场景没有类加载声明和一个虚构的example.jar:

  • 如果将example.jar放在WEB-INF/lib中 并且它在jboss // lib也不存在,则example.jar只对该特定WAR可见.
  • 如果你把example.jarWEB-INF/lib目录 确实也存在于JBoss的// lib中,在实例WEB-INF/lib目录将基本上被忽略,WAR将使用JBoss服务器实例的统一的类加载器加载来自jboss // lib/example.jar的示例类.(同样适用于同一服务器实例中的任何其他WAR或EAR,假设没有类加载覆盖.)

类装载声明的情况下(如),您有两个不同版本的必要example.jar: - JBoss的// lib目录下:example1.0.jar - WEB-INF/lib目录下:example2.0.jar

在这种情况下,JBoss将为您的WAR创建一个独特且独立的类加载器,这将避免在WAR的上下文中使用jboss // lib/example1.0.jar来支持WEB-INF/lib/example2.0.jar.

总之,如果您只在jboss服务器实例中运行一个WAR和/或您没有冲突的JAR问题,请抛弃类加载声明并将您的JAR放在jboss // lib中.它使WAR文件更轻量级,整体部署可能更简单,并且您不会在热部署期间使用额外的类版本消耗额外的内存.