我有2个战争(比如A和B)和1个jar(C)。
A.war和B.war都依赖于jar C.由于jar C包含单例,因此只有1 C,A和B共享。
我使用maven构建每个部署都没有任何问题。 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的依赖。 我已经为A和B添加了maven-war-plugin,为C添加了maven-jar-plugin。
<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>
基本上:我想在JBoss中为A和B共享一个项目(jar)C。我使用IntelliJ IDEA 14.1.5和JBoss Wildfly 8.2.1。 C的lib无法添加到A或B.
我错过了什么/做错了什么?怎么做到这一点?
答案 0 :(得分:1)
为什么不能在两个war文件中包含jar文件?在大多数情况下,这并不比使用共享jar更糟糕。
执行此操作的标准方法是将.war文件和.jar文件打包到单个.ear文件部署中。通过这种方式,它们可以一起部署。
或者,如果您使用的是JBOSS AS 7.1+或Wildfly,您可以将jar构建到模块中并将其安装在服务器本身中。