2015-10-23 32 views
1

我有2个战争(比如A和B)和1个jar(C)。如何在两次战争之间共享一个依赖(jar)在JBoss中

两个A.war和B.war取决于罐C.由于罐子C包含单身,只能有1 C,为共享和B.

我建立与行家每个部署没有任何问题。无论是从A和B的POM包含:

<dependency> 
     <groupId>C</groupId> 
     <artifactId>C</artifactId> 
     <version>1.0</version> 
     <scope>provided</scope> 
    </dependency> 

当我尝试将部署添加到JBoss(手动,通过管理控制台),C和A给我任何问题,而B抛出错误:

outcome 'failed', "JBAS014671: Failed services". 
StartException in service jboss.undertow.deployment.default-server.default-host./b: Failed to start service 
Caused by: java.lang.LinkageError: failed to link [class from B] (Module "B.war:main" from Service Module Loader) 
Caused by: java.lang.NoClassDefFoundError: [class from jar C] 
Caused by: java.lang.ClassNotFoundException: [class from jar C] from (Module "B.war:main" from Service Module Loader) 

所以基本上:JBoss无法解决从B.war到C.jar的依赖关系。 我已经加入Maven的战争插件A和B以及Maven的JAR-插件C.

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifest> 
         <addClasspath>true</addClasspath> 
        </manifest> 
        <manifestEntries> 
         <Dependencies>org.slf4j</Dependencies> 
        </manifestEntries> 
       </archive> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

所以基本上我想有一个共享的项目(JAR)在JBoss中下A和B 。我使用IntelliJ IDEA 14.1.5和JBoss Wildfly 8.2.1。 C的lib不能添加到A或B中。

我在想什么/错在哪里?如何实现这一目标?

回答

1

为什么你不能在两个war文件中包含jar文件?在大多数情况下,这并不比使用共享jar更糟糕。

执行此操作的标准方法是将.war文件和.jar文件打包到单个.ear文件部署中。这样他们都被部署在一起。另外,如果您使用JBOSS AS 7.1+或Wildfly,则可以将该jar构建到模块中并将其安装到服务器本身中。

+0

我一开始就这样做了,但是C包含带缓存的单例,并且这会导致同时有两个缓存(一个用于A,另一个用于B)。所以只能有一个C的实例(也是明智的)。有没有可能将URL映射保存在.ear文件中?因为将来我会根据C进行另一场前端战争(所以1个webservice,2个前端和1个核心)。我会看看jboss中的模块。 –

相关问题