Java JBoss-War库依赖项

Java JBoss-War库依赖项,java,jboss,Java,Jboss,我正在尝试添加一些依赖项jar文件。但是,当将这些文件放入lib/approved或WEB\u-INF/lib.jar时,会导致jboss实例的启动错误。我想这是因为JBoss的扁平类加载器结构。如果有人在jboss web.xml <class-loading> <loader-repository>com.example:archive=unique-archive-name</loader-repository> </class-l

我正在尝试添加一些依赖项jar文件。但是,当将这些文件放入
lib/approved
WEB\u-INF/lib.jar
时,会导致jboss实例的启动错误。我想这是因为JBoss的扁平类加载器结构。如果有人在
jboss web.xml

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

com.example:archive=唯一的存档名称
有人能给我举个真实的例子吗


另外,我应该把这些jar文件放在哪里——jboss的
lib/assessed
,或者部署文件夹中的
lib
文件夹,或者
WEB\u INF/lib
它们属于WAR文件的WEB-INF/lib目录。不要把东西放在已背书的文件夹中。

Duffymo关于不要把罐子放在已背书的文件夹中的指示被忽略,后果自负

在一些其他细节中:

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

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

  • 如果将example.jar放在WEB-INF/lib中,并且也存在于jboss//lib中,那么example.jar将仅对该特定战争可见
  • 如果将example.jar放在WEB-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文件更轻量级,总体部署可能更简单,并且在热部署期间,您不会使用额外的类版本消耗额外的内存