2011-07-01 49 views
2

我想添加一些依赖项jar文件。但是,将这些文件放在lib/endorsedWEB_INF/lib.jar中会导致jboss实例启动错误。我想这是因为JBoss的平坦的类加载器结构。如果有人已经jboss-web.xml实现的类加载器设置JBoss - War库依赖关系

<class-loading> 
     <loader-repository>com.example:archive=unique-archive-name</loader-repository> 
</class-loading> 

有人可以给我一个现实生活中的例子吗?

而且我应该在哪里放置这些jar文件 - 的JBoss lib/endorsed,或lib文件夹中的部署文件夹或WEB_INF/lib

回答

2

他们属于在WEB-INF/lib目录WAR文件的目录。不要把东西放在背书夹里。

5

Duffymo关于不放罐子的指令支持在您的危险中被忽略。

在一些额外的细节:

库放入您的WEB-INF/lib目录是便携性和一致性的最佳做法,因为它坚持创造自给自足和分配网络档案馆的标准条款,但您需要密切关注类加载声明,您将其放入jboss-web.xml

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

  • 如果你把example.jarWEB-INF/lib目录它确实不是也存在于jboss // lib,然后example.jar只对特定的WAR可见。
  • 如果你把example.jarWEB-INF/lib目录确实也存在于的JBoss // LIB,在WEB-INF /实例LIB将主要被忽略,WAR将使用JBoss服务器实例的统一类加载器加载示例类,其中jboss // lib/example.jar。 (这同样适用于在同一服务器实例的任何其他战争或耳朵,假设没有类加载覆盖。)

类加载声明的情况下(如),您需要有两个不同版本的example.jar: - jboss // lib:example1.0。罐子 - WEB-INF/lib目录下:example2.0.jar

在这种情况下,JBoss会为您的WAR一个独特的和孤立的类加载器,这将避免在有利于的JBoss // LIB/example1.0.jar在WAR的上下文中,使用WEB-INF/lib/example2.0.jar的

总之,如果你只运行在JBoss服务器实例一个WAR和/或你有没有冲突的JAR问题,沟类加载声明,并把你的JAR在的JBoss // LIB。它使得WAR文件更加轻量,整体部署可能会更简单,并且在热部署期间不会消耗更多内存和额外的类版本。

+0

+1为有用的描述。 – ziggy