我在开发环境中使用JBoss 4.2.2.GA应用服务器。我有一个WAR文件MyWar.war
和一个JAR文件ExternalJar.jar
。这些文件的结构如下:
应用程序WAR文件:
MyWar.war
|
|--- AppClass1.class
|
|--- AppClass2.class
外部jar文件(由客户提供):
ExternalJar.jar
|
|--- ExternalClass.class
ExternalClass需要使用AppClass1,而AppClass2需要使用ExternalClass。当我在JBoss中部署WAR并将JAR放在JBoss的类路径中时,在运行应用程序时,我在实例化ExternalClass
时遇到了LinkageError。似乎WAR看到ExternalClass
,但ExternalClass
无法访问WAR中的类。
如果我手动将ExternalJar
放入WAR文件(WEB-INF / lib)中,它可以正常工作。但我们宁愿不修改存档文件以保持与我们的生产部署的一致性。
JBoss中是否有任何配置或设置允许包含在 app 的类路径中的共享库文件夹?
答案 0 :(得分:1)
您可以通过执行以下操作来禁用WAR文件类加载器隔离:
打开此文件
%JBOSS_HOME%\server\<serverName>\deploy\jboss-web.deployer\META-INF\jboss-service.xml
将此属性设置为true:
<attribute name="UseJBossWebLoader">true</attribute>
您应该能够将扩展JAR文件放在带有WAR文件的deploy/
目录中。
如果您使用相同的库加载多个WAR文件,此设置可能会导致问题,因此YMMV。
答案 1 :(得分:1)
您可以像部署战争一样部署jar文件。由于JBoss使用共享类加载器,因此您的jar将能够访问从战争中加载的类。