升级BouncyCastle至1.66后Java应用无法部署到WildFly求助
BouncyCastle 1.66升级后WildFly部署失败问题解决
核心问题总结
- WildFly类索引器无法处理BouncyCastle 1.66包中的
module-info.class(BC从1.64版本开始加入该文件适配高版本JDK,但JDK8不支持模块,导致WildFly处理出错) - ejbca-ws-cli-6-6.0.jar存在无效的Class-Path引用
- 最终触发
java.lang.ArrayIndexOutOfBoundsException: 1612导致部署失败
解决方案
1. 剔除War包中所有依赖的module-info.class
JDK8不需要模块信息,直接用Maven打包插件过滤掉这些文件:
在pom.xml的<build>节点下添加maven-war-plugin配置:
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.2</version> <configuration> <packagingExcludes>WEB-INF/lib/*/module-info.class</packagingExcludes> </configuration> </plugin> </plugins>
2. 修复ejbca-ws-cli-6-6.0.jar的无效Class-Path引用
- 如果是手动添加的jar:打开该jar,找到
META-INF/MANIFEST.MF文件,删除或修正Class-Path行里的无效路径/依赖,重新打包jar后再引入。 - 如果是Maven依赖:排查该jar的传递依赖,排除不存在的依赖项,或者替换为版本兼容的ejbca-ws-cli版本。
3. 调整BouncyCastle依赖方式避免冲突
方式一:让WildFly提供BC 1.66模块
既然你设置了<scope>provided</scope>,就得确保WildFly用的是1.66版本的BC:
- 找到WildFly安装目录下的
modules/system/layers/base/org/bouncycastle - 替换目录里的bcprov、bcmail、bcpkix jar为1.66版本,同时修改
module.xml里的版本信息。
方式二:War包自带BC,排除WildFly自带的旧版本
把BC的依赖范围改成compile,然后在War包的WEB-INF下创建jboss-deployment-structure.xml,排除WildFly自带的BC模块:
<jboss-deployment-structure> <deployment> <exclusions> <module name="org.bouncycastle"/> </exclusions> </deployment> </jboss-deployment-structure>
4. 升级Maven打包插件版本
旧版本的Maven插件可能处理新jar时存在兼容性问题,升级插件并指定JDK版本:
在pom.xml的<build>节点下添加maven-compiler-plugin配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin>
内容的提问来源于stack exchange,提问作者user3637971
相关产品推荐
相关产品推荐

