You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署JavaEE应用遇jasypt.StrongPasswordEncryptor类未找到异常求助

问题

基于WildFly-26.1.0.Final服务器搭建JavaEE应用,使用jasypt库实现密码加密功能,但启动服务器时抛出org.jasypt.util.password.StrongPasswordEncryptor类未找到异常及相关错误。服务器输出日志如下:

18:51:59,300 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC000001: Failed to start service jboss.deployment.subunit."ProyectoServidor.ear"."ProyectoEJB-ejb.jar".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.subunit."ProyectoServidor.ear"."ProyectoEJB-ejb.jar".POST_MODULE: WFLYSRV0153: Failed to process phase POST_MODULE of subdeployment "ProyectoEJB-ejb.jar" of deployment "ProyectoServidor.ear"
        at org.jboss.as.server@18.1.0.Final//org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:189)
        at org.jboss.msc@1.4.13.Final//org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1739)
        at org.jboss.msc@1.4.13.Final//org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1701)
        at org.jboss.msc@1.4.13.Final//org.jboss.msc.service.ServiceControllerImpl$ControllerTask.run(ServiceControllerImpl.java:1559)
        at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
        at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
        at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
        at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1363)
        at java.base/java.lang.Thread.run(Thread.java:833)
    Caused by: java.lang.RuntimeException: WFLYSRV0177: Error getting reflective information for class com.fannog.proyectoservidor.utils.Encryptor with ClassLoader ModuleClassLoader for Module "deployment.ProyectoServidor.ear.ProyectoEJB-ejb.jar" from Service Module Loader
        at org.jboss.as.server@18.1.0.Final//org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:78)
        at org.jboss.as.server@18.1.0.Final//org.jboss.as.server.deployment.reflect.ClassReflectionIndexUtil.findMethod(ClassReflectionIndexUtil.java:57)
        at org.jboss.as.ejb3@26.1.0.Final//org.jboss.as.ejb3.deployment.processors.dd.DeploymentDescriptorMethodProcessor.handleStatelessSessionBean(DeploymentDescriptorMethodProcessor.java:99)
        at org.jboss.as.ejb3@26.1.0.Final//org.jboss.as.ejb3.deployment.processors.dd.DeploymentDescriptorMethodProcessor.deploy(DeploymentDescriptorMethodProcessor.java:76)
        at org.jboss.as.server@18.1.0.Final//org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:182)
        ... 8 more
    Caused by: java.lang.NoClassDefFoundError: org/jasypt/util/password/StrongPasswordEncryptor
        at java.base/java.lang.Class.getDeclaredFields0(Native Method)
        at java.base/java.lang.Class.privateGetDeclaredFields(Class.java:3297)
        at java.base/java.lang.Class.getDeclaredFields(Class.java:2371)
        at org.jboss.as.server@18.1.0.Final//org.jboss.as.server.deployment.reflect.ClassReflectionIndex.<init>(ClassReflectionIndex.java:72)
        at org.jboss.as.server@18.1.0.Final//org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:70)
        ... 12 more
    Caused by: java.lang.ClassNotFoundException: org.jasypt.util.password.StrongPasswordEncryptor from [Module "deployment.ProyectoServidor.ear.ProyectoEJB-ejb.jar" from Service Module Loader]
        at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:200)
        at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:410)
        at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
        at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116)
        ... 17 more
异常原因

核心原因是WildFly的模块类加载器无法找到jasypt库中的StrongPasswordEncryptor类,具体分为以下几种场景:

  • 项目打包时未将jasypt的jar包包含到部署单元中:比如EJB模块(ProyectoEJB-ejb.jar)或EAR的共享lib目录里没有jasypt的jar,导致部署时模块类加载器找不到该类。
  • 依赖配置错误:如果使用Maven/Gradle构建,jasypt依赖的scope被设置为provided,但WildFly默认不自带jasypt库,导致打包时未将jar包纳入部署包。
  • 手动部署jasypt到WildFly模块时配置错误:若尝试将jasypt作为服务器全局模块,未正确创建模块目录、配置module.xml,或未在部署描述符中声明依赖,导致类加载失败。
解决建议

针对不同场景,可采取以下解决方案:

1. 修正项目依赖与打包配置

如果使用Maven,确保jasypt依赖的scope为compile(默认值,无需显式声明),这样打包时会将jar包包含到部署单元中:

<dependency>
    <groupId>org.jasypt</groupId>
    <artifactId>jasypt</artifactId>
    <version>1.9.3</version> <!-- 替换为你项目中对应的版本 -->
</dependency>

对于EAR项目,确保jasypt.jar被打包到EAR的lib目录下,这样所有子模块(EJB、Web等)都能共享加载该库;如果是单独的EJB模块,需将jasypt.jar放入EJB模块的lib目录(或Web模块的WEB-INF/lib)。

2. 将jasypt配置为WildFly全局模块

若希望整个WildFly服务器共享jasypt库,可按以下步骤操作:

  1. 在WildFly安装目录下创建模块目录:${JBOSS_HOME}/modules/org/jasypt/main
  2. 将jasypt.jar放入该目录
  3. 在该目录下创建module.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.3" name="org.jasypt">
    <resources>
        <resource-root path="jasypt-1.9.3.jar"/> <!-- 替换为你的jar文件名 -->
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>
  1. 在项目的jboss-deployment-structure.xml中声明对该模块的依赖(若没有该文件,可在EAR或EJB模块的META-INF目录下创建):
<jboss-deployment-structure>
    <deployment>
        <dependencies>
            <module name="org.jasypt" export="true"/>
        </dependencies>
    </deployment>
</jboss-deployment-structure>

内容的提问来源于stack exchange,提问作者Facundo Suarez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:45:37