如何在 multi-war ear 部署中隔离/删除 1 个子系统、jar

How to isolate / remove 1 subsystem, jar in a multi-war ear deployment

目前我正在 ear 部署中测试多个 war 模块。

基本上我有 2 个 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"},

我知道我已经在 2 个单独的 war 上定义了它们,但它们不应该被隔离吗?

我还尝试在 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 - 失败。我也尝试在主部署或子部署中排除整个子系统也失败了。

知道如何解决此类问题吗?如果我有另一个 jar 2 wars 将依赖,那么从这种情况我假设我也会有类似的问题。

这个问题与 pom 或 jboss-deployment-structure 无关,而是与 web.xml 相关。我不小心在 war 上设置了相同的模块名称,从而导致名称冲突。该名称与包名称相同,所以错误让我感到困惑。如果有人遇到同样的问题,请先检查您的 web.xml。