如何在多战部署中隔离/移除1个子系统,jar

时间:2017-04-08 05:07:42

标签: java-ee deployment jboss wildfly war

目前,我正在测试耳内部署的多战模块。

基本上我有两个依赖的战争:hibernate-validator,它进一步依赖于:javax.validation.api并包含ValidatorFactory。我认为这也会导致jca子系统的激活。

我不明白为什么我会得到:

Caused by: org.jboss.msc.service.DuplicateServiceException: Service jboss.naming.context.java.module.xxx-ear.cmp.ValidatorFactory is already registered"},

据我所知,我已经在两场不同的战争中定义了它们但是它们不应该被隔离?

我还尝试在ear的meta-inf文件夹中添加jboss-deployment-structure.xml,其中包含:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <!-- Make sub deployments isolated by default, so they cannot see each others 
        classes without a Class-Path entry -->
    <ear-subdeployments-isolated>true</ear-subdeployments-isolated>

    <deployment>
        <exclusions>
            <module name="javax.validation.api" />
        </exclusions>
    </deployment>

    <sub-deployment name="xxx-api.war">
        <exclusions>
            <module name="javax.validation.api" />
        </exclusions>
        <exclude-subsystems>
            <subsystem name="jca" />
        </exclude-subsystems>
    </sub-deployment>

    <sub-deployment name="xxx-web.war">
        <exclusions>
            <module name="javax.validation.api" />
        </exclusions>
    </sub-deployment>

</jboss-deployment-structure>

我尝试在部署和子部署中排除jar - 失败。我也尝试在主要部署或子部署中排除整个子系统也失败了。

知道如何解决这类问题吗?如果我有两个战争将依赖的另一个罐子怎么办呢?那么从这个案例我认为我也会遇到类似的问题。

1 个答案:

答案 0 :(得分:0)

这个问题与pom和jboss-deployment-structure无关,而是与web.xml有关。我不小心在两次战争中都设置了相同的模块名称,从而导致名称冲突。名称与包名称相同,因此错误让我感到困惑。如果有人遇到同样的问题,请先检查你的web.xml。