如何在JBoss中的两场战争中共享一个依赖项(jar)

时间:2015-10-23 16:08:47

标签: maven jar jboss manifest war

我有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.

我错过了什么/做错了什么?怎么做到这一点?

1 个答案:

答案 0 :(得分:1)

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

执行此操作的标准方法是将.war文件和.jar文件打包到单个.ear文件部署中。通过这种方式,它们可以一起部署。

或者,如果您使用的是JBOSS AS 7.1+或Wildfly,您可以将jar构建到模块中并将其安装在服务器本身中。