Wildfly 26.1.2.Final使用elytron-tool遇ModuleNotFoundException求解决
WildFly 26.1.2.Final中elytron-tool模块找不到的解决办法
问题背景
我们用Gradle的Galleon插件配置WildFly 26.1.2.Final,想通过elytron-tool管理密钥库,gradle.properties配置如下:
galleonVersion = 5.0.5.Final wildflyVersion = 26.1.2.Final wildflyLayers = cdi,jaxrs,microprofile-config,logging,datasources,mail,h2-datasource,core-management,web-console,core-tools
(注:原配置里的core-toolstwild是笔误,修正为core-tools)
把elytron和elytron-tool加到wildflyLayers后,运行elytron-tool.sh/elytron-tool.bat还是报模块找不到:
org.jboss.modules.ModuleNotFoundException: org.wildfly.security.elytron-tool at org.jboss.modules.ModuleLoader.loadModule(ModuleLoader.java:301) at org.jboss.modules.Main.main(Main.java:358)
已知WildFly 27修复了这个问题,但暂时不想升级,需要WildFly 26的解决办法。
可行解决方案
WildFly 26的核心Galleon feature pack没把elytron-tool包含在标准layers里,直接加layers名称没用,试试下面几种方法:
方法1:用Galleon安装elytron-tool专属feature pack
在Gradle构建脚本里,添加WildFly Elytron Tool的feature pack依赖,让Galleon自动安装该模块:
- 先在依赖块里添加:
dependencies { wildfly 'org.wildfly.security:wildfly-elytron-tool-galleon-pack:26.1.2.Final' }
- 然后在Provision任务配置中,引入这个feature pack并包含对应的layer:
tasks.withType(org.wildfly.galleon.plugin.ProvisionTask) { provision { featurePack location: "org.wildfly:wildfly-galleon-pack:${wildflyVersion}" featurePack location: "org.wildfly.security:wildfly-elytron-tool-galleon-pack:${wildflyVersion}" layers = wildflyLayers.split(',') + ['elytron-tool'] } }
重新执行Provision任务后,elytron-tool模块会被正确部署,脚本就能正常运行了。
方法2:手动添加elytron-tool模块
不想改Gradle配置的话,手动把模块放到WildFly的modules目录:
- 从Maven仓库下载
wildfly-elytron-tool-26.1.2.Final.jar - 在WildFly安装目录的
modules下创建路径:org/wildfly/security/elytron-tool/main - 把下载的jar包放进这个目录,再创建
module.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <module name="org.wildfly.security.elytron-tool" xmlns="urn:jboss:module:1.9"> <resources> <resource-root path="wildfly-elytron-tool-26.1.2.Final.jar"/> </resources> <dependencies> <module name="org.wildfly.security.elytron"/> <module name="org.jboss.logging"/> <module name="javax.api"/> <module name="org.jboss.modules"/> </dependencies> </module>
做完这些,重新运行elytron-tool脚本就没问题了。
方法3:直接用Java命令调用jar包
临时使用的话,不用脚本,直接用Java命令运行jar:
java -jar /path/to/wildfly-elytron-tool-26.1.2.Final.jar [你的命令参数]
或者用WildFly的模块加载器运行:
./bin/jboss-modules.sh -mp modules org.wildfly.security.elytron-tool [你的命令参数]
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

