2009-12-03 96 views
2

我在开发环境中使用JBoss 4.2.2.GA应用服务器。我有一个WAR文件,MyWar.war,和一个JAR文件ExternalJar.jar。这些文件的结构通过以下方式:在JBoss中我可以配置一个“共享库”位置吗?

应用WAR文件:

MyWar.war 
| 
|--- AppClass1.class 
| 
|--- AppClass2.class  

外部JAR文件(由客户提供):

ExternalJar.jar 
| 
|--- ExternalClass.class 

ExternalClass需要使用AppClass1和AppClass2需要使用ExternalClass。当我在JBoss中部署WAR并将JAR放入JBoss的类路径中时,当我运行该应用程序时,出现LinkageError实例化ExternalClass。看起来好像WAR看到ExternalClass,但ExternalClass无法访问WAR内的类。

如果我手动将ExternalJar放在WAR文件(WEB-INF/lib)中,它工作正常。但我们宁愿不修改存档文件以保持与我们的生产部署的一致性。

在JBoss中是否有配置或设置允许共享库文件夹将被包含在应用的类路径中?

打开此文件 %JBOSS_HOME%\server\<serverName>\deploy\jboss-web.deployer\META-INF\jboss-service.xml

将此属性设置为true:

+0

为什么你不能在你的战争中捆绑的jar作为你的战争构建逻辑的一部分,是否有一个特别的原因? – Romain 2009-12-03 20:23:06

+0

这个罐子将来自客户,我们不会在创建战争的时候拥有它。我们可以将战争交给客户,并要求他创建他的jar .Jboss应该能够在运行时选择它。根据上面的说明,战争和罐子应该能够看到对方。 – 2009-12-03 21:22:00

回答

1

您可以通过执行以下禁用WAR文件类加载器隔离 <attribute name="UseJBossWebLoader">true</attribute>

你应该能够把您的扩展使用WAR文件在deploy/目录中的JAR文件。

如果您使用相同的库加载多个WAR文件,则此设置可能会导致问题,因此YMMV。

1

您可以像部署战争一样部署jar文件。由于JBoss使用共享类加载器,你的jar将能够访问从war中加载的类。

相关问题