java - 排除模块在 JBoss 7.2.1 中不起作用

标签 java maven jboss jboss7.x

在我的项目中,我们使用 validation-api:1.1.0.Final 并且我们的项目是基于标准 maven web 的项目。当我将 war 部署到 JBOSS 时,出现以下错误

Caused by: java.lang.NoSuchMethodError: javax.validation.Configuration.parameterNameProvider(Ljavax/validation/ParameterNameProvider;)Ljavax/validation/Configuration;
           at org.apache.cxf.validation.BeanValidationProvider.initFactoryConfig(BeanValidationProvider.java:102) [cxf-core-3.0.2.jar:3.0.2]
           at org.apache.cxf.validation.BeanValidationProvider.<init>(BeanValidationProvider.java:59) [cxf-core-3.0.2.jar:3.0.2]
           at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [rt.jar:1.6.0_27]
           at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) [rt.jar:1.6.0_27]
           at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) [rt.jar:1.6.0_27]
           at java.lang.reflect.Constructor.newInstance(Constructor.java:513) [rt.jar:1.6.0_27]
           at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147) [spring-beans-4.1.1.RELEASE.jar:4.1.1.RELEASE]

似乎 JBOSS 正在插入它自己的 validation-api-1.0.0.GA-redhat-2 jar,这是导致问题的原因。

我尝试将 jboss-deployment-structure.xml 文件放在 WEB-INF/目录下,但它不起作用

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

我正在使用 JBoss EAP 6.1.1.GA (AS 7.2.1.Final-redhat-10)

专家

<!-- Validation using Annotations -->
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.1.1.Final</version>
    <!-- <scope>provided</scope> -->
</dependency>
<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>javax.el</artifactId>
    <version>2.2.4</version>
</dependency>

javax模块

<module xmlns="urn:jboss:module:1.1" name="javax.validation.api">
  <resources>
      <resource-root path="validation-api-1.1.0.Final.jar"/>
      <!-- Insert resources here -->
  </resources>

  <dependencies>
    <module name="org.jboss.logging"/>
  </dependencies>
</module>

我一直在努力度过难关。任何帮助将不胜感激。

最佳答案

您还需要排除模块 javaee.api,因为它引用了 javax.validation.api。检查 JBOSS_HOME\modules\system\layers\base\javaee\api\main\module.xml ,它会包含这个:

<module xmlns="urn:jboss:module:1.1" name="javaee.api">
<resources>
    <!-- Insert resources here -->
</resources>

<dependencies>
    ....
    <module name="javax.transaction.api" export="true"/>
    <module name="javax.validation.api" export="true"/>
    ....

    <!-- This one always goes last. -->
    <module name="javax.api" export="true"/>
</dependencies>

然后在你实际需要的 jboss-deployment-structure.xml 文件中包含上面 module.xml 中列出的其他依赖项。

可以在这里找到更多详细信息: https://docs.jboss.org/author/display/AS7/Class+Loading+in+AS7 (引用 JBoss 部署结构文件部分)

关于java - 排除模块在 JBoss 7.2.1 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27466868/

相关文章:

java - 如何在 viewpager 中同时显示 2 个 fragment ?

java - 链式 react 破砖

java - 使用带有 IntelliJ 的 Maven 在 tomcat 中运行应用程序

java - 为什么 travis 没有设置正确的 JDK?

java - 如何在没有 Gradle 或 Maven 的情况下在 Intellij 2020.2 中创建新的 Java EE 项目?

java - TreeSet:有效地元素数量小于某个值

maven - 如何在maven中编译依赖?

java - 在java中编译和部署选定的模块

java - 通过 JAAS 以编程方式登录用户

java - 根据部署的 jar 动态创建导航菜单