JBoss - 如何在 jboss-deployment-structure 中排除 javax.validation?
JBoss - How can to exclude javax.validation in jboss-deployment-structure?
我有 .war 使用 Jersey REST,它在 tomCat 中有效。但是我需要 运行 我的 .war 在 JBoss 6.4.0 中导致异常
java.lang.RuntimeException: java.lang.NoSuchMethodError:
javax.validation.spi.ConfigurationState.getParameterNameProvider()
因为 JBoss 使用旧版本 javax.validation,我需要从 JBoss 的部署中排除 javax.validation。
我在 .war:
的 WEB-INF 中创建 jboss-deployment-structure.xml
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<exclude-subsystems>
<subsystem name="resteasy" />
<subsystem name="jpa"/>
<subsystem name="org.hibernate" />
<subsystem name="org.hibernate.validator" />
</exclude-subsystems>
<exclusions>
<module name="javaee.api" />
<module name="javax.ws.rs.api"/>
<module name="org.jboss.resteasy.resteasy-jaxrs"/>
<module name="javax.validation.api"/>
<module name="org.hibernate"/>
<module name="org.hibernate.validator"/>
</exclusions>
</deployment>
</jboss-deployment-structure>
这帮助我排除了 javax.ws.rs,但是如何排除 javax.validation?请帮助我
所以,这是一个东西!可能对某人有帮助:
JBoss 中的库 javax.validation.api - 属于 隐式模块 ,关于隐式模块的文档:implicit module dependencies
所以隐式模块是 Automatic Dependencies,它们可以排除,关于这个:class lading and automatic dependencies - 关于 Automatic Dependencies 的部分:
可以通过使用 jboss-deployment-structure.xml 排除自动依赖项。但这是行不通的! :(,并且 JBoss 与类似的库 javax.persistence 有错误,并且它在任务中打开错误。
那么 - 可以做什么?
- 更新 JBoss 到 7.0.0 版本,但现在只有 Alpha 和 Beta 版本:(
- 在新版本 .jar 上替换旧 javax.validation.api .jar
(在 EAP-6.4.0/modules/system/layers/base/javax/faces/api/main)
- 添加自定义版本,纠结:
更改 EAP-6.4.0/modules/system/layers/base/javax/faces/api/main module.xml 文件中的默认配置,第
<module name="javax.validation.api" export="true"/>
行删除选项 export="true"
,结果:<module name="javax.validation.api"/>
这更改为允许您添加新的自定义库 javax.validation。
并在 EAP-6.4.0/modules/system/layers/base/javax/validation/api 中创建名为 1.1 的自定义文件夹,放入 1.1文件夹新建javax.validation.jar和model.xml.
model.xml:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="javax.validation.api" slot="1.1">
<resources>
<resource-root path="validation-api-1.1.0.Final.jar"/>
</resources>
<dependencies>
<module name="org.jboss.logging"/>
</dependencies>
</module>
params:
slot - name custom folder (1.1),
path - path to .jar library
最后:将模块添加到项目中的 jboss-deployment-structure.xml:
<dependencies>
<module name="javax.validation.api" slot="1.1" export="true"/>
</dependencies>
好的,所以您不仅需要排除
<module name="javax.validation.api"/>
本身,还有依赖于 javax.validation.api 模块的模块。查看哪些模块依赖于 javax.validation.api 并强制包含它(即使它被排除在外)的最简单方法是在中搜索您的 .xml 文件
JBOSS_DIRECTORY/modules 对于 javax.validation.api,依赖的模块在 module.xml 中有类似的东西:
<dependencies>>
<module name="javax.validation.api"/>
...
并且还需要排除这些模块。对我来说 - 我还需要排除:
<module name="javax.faces.api"/>
<module name="org.jboss.resteasy.resteasy-hibernatevalidator-provider"/>
然后,javax 验证排除工作 :)
我有 .war 使用 Jersey REST,它在 tomCat 中有效。但是我需要 运行 我的 .war 在 JBoss 6.4.0 中导致异常
java.lang.RuntimeException: java.lang.NoSuchMethodError:
javax.validation.spi.ConfigurationState.getParameterNameProvider()
因为 JBoss 使用旧版本 javax.validation,我需要从 JBoss 的部署中排除 javax.validation。
我在 .war:
的 WEB-INF 中创建 jboss-deployment-structure.xml<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<exclude-subsystems>
<subsystem name="resteasy" />
<subsystem name="jpa"/>
<subsystem name="org.hibernate" />
<subsystem name="org.hibernate.validator" />
</exclude-subsystems>
<exclusions>
<module name="javaee.api" />
<module name="javax.ws.rs.api"/>
<module name="org.jboss.resteasy.resteasy-jaxrs"/>
<module name="javax.validation.api"/>
<module name="org.hibernate"/>
<module name="org.hibernate.validator"/>
</exclusions>
</deployment>
</jboss-deployment-structure>
这帮助我排除了 javax.ws.rs,但是如何排除 javax.validation?请帮助我
所以,这是一个东西!可能对某人有帮助: JBoss 中的库 javax.validation.api - 属于 隐式模块 ,关于隐式模块的文档:implicit module dependencies
所以隐式模块是 Automatic Dependencies,它们可以排除,关于这个:class lading and automatic dependencies - 关于 Automatic Dependencies 的部分: 可以通过使用 jboss-deployment-structure.xml 排除自动依赖项。但这是行不通的! :(,并且 JBoss 与类似的库 javax.persistence 有错误,并且它在任务中打开错误。
那么 - 可以做什么?
- 更新 JBoss 到 7.0.0 版本,但现在只有 Alpha 和 Beta 版本:(
- 在新版本 .jar 上替换旧 javax.validation.api .jar (在 EAP-6.4.0/modules/system/layers/base/javax/faces/api/main)
- 添加自定义版本,纠结:
更改 EAP-6.4.0/modules/system/layers/base/javax/faces/api/main module.xml 文件中的默认配置,第
<module name="javax.validation.api" export="true"/>
行删除选项export="true"
,结果:<module name="javax.validation.api"/>
这更改为允许您添加新的自定义库 javax.validation。 并在 EAP-6.4.0/modules/system/layers/base/javax/validation/api 中创建名为 1.1 的自定义文件夹,放入 1.1文件夹新建javax.validation.jar和model.xml.
model.xml:
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.1" name="javax.validation.api" slot="1.1"> <resources> <resource-root path="validation-api-1.1.0.Final.jar"/> </resources> <dependencies> <module name="org.jboss.logging"/> </dependencies> </module>
params: slot - name custom folder (1.1), path - path to .jar library
最后:将模块添加到项目中的 jboss-deployment-structure.xml:
<dependencies>
<module name="javax.validation.api" slot="1.1" export="true"/>
</dependencies>
好的,所以您不仅需要排除
<module name="javax.validation.api"/>
本身,还有依赖于 javax.validation.api 模块的模块。查看哪些模块依赖于 javax.validation.api 并强制包含它(即使它被排除在外)的最简单方法是在中搜索您的 .xml 文件 JBOSS_DIRECTORY/modules 对于 javax.validation.api,依赖的模块在 module.xml 中有类似的东西:
<dependencies>>
<module name="javax.validation.api"/>
...
并且还需要排除这些模块。对我来说 - 我还需要排除:
<module name="javax.faces.api"/>
<module name="org.jboss.resteasy.resteasy-hibernatevalidator-provider"/>
然后,javax 验证排除工作 :)