GlassFish运行Java EE应用报错:NoClassDefFoundError: org/apache/commons/logging/LogFactory
解决GlassFish中org.apache.commons.logging.LogFactory缺失错误
错误成因
这个错误的核心是Apache HttpClient组件依赖Apache Commons Logging,即便你移除了自己代码对Commons Logging的直接调用,HttpClient在初始化DefaultHostnameVerifier时仍会尝试加载LogFactory类。如果这个类既不在GlassFish的服务器类路径中,也没有被打包进你的应用部署包,就会触发ClassNotFoundException,进而导致NoClassDefFoundError。
排查遗漏点
- 传递依赖未处理:你可能只检查了自己代码的依赖,但Maven/Gradle等构建工具会自动引入HttpClient的传递依赖(包括Commons Logging),之前的配置检查可能忽略了这一点。
- 部署包依赖缺失:清理构建后,需确认WAR/EAR包的
WEB-INF/lib(Web应用)或lib目录(EAR)中是否包含commons-logging.jar,若缺失则说明构建时未将依赖打包。 - 类加载优先级冲突:GlassFish服务器库中若存在旧版本的Commons Logging Jar,而你的应用中打包了新版本,可能会导致类加载失败;反之若服务器和应用都没有该Jar,也会触发错误。
解决方法
方法1:显式添加并打包Commons Logging依赖
如果使用Maven,在pom.xml中添加依赖并确保打包到应用:
<dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> <scope>compile</scope> <!-- 确保该Jar被打包进WEB-INF/lib --> </dependency>
重新构建部署后,检查WAR包的WEB-INF/lib目录,确认commons-logging.jar存在。
方法2:用SLF4J替代Commons Logging(避免依赖)
若不想引入Commons Logging,可使用SLF4J的桥接包,让HttpClient通过SLF4J输出日志:
- 添加SLF4J相关依赖并排除HttpClient的Commons Logging依赖:
<!-- SLF4J核心API --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.36</version> </dependency> <!-- 桥接Commons Logging到SLF4J --> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>1.7.36</version> <scope>runtime</scope> </dependency> <!-- 可选:添加具体日志实现,比如logback --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.11</version> </dependency> <!-- 排除HttpClient的Commons Logging依赖 --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.14</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency>
方法3:将Jar放入GlassFish服务器库
把commons-logging.jar复制到GlassFish的domains/[你的域名]/lib目录,重启服务器后,该域名下的所有应用都能访问这个类。但这种方式可能引发多应用的版本冲突,不推荐在多应用部署场景使用。
内容的提问来源于stack exchange,提问作者Miguel
相关产品推荐
相关产品推荐

