环境
IDEA Ultimate 2018.3
MAVEN 3.5.4
背景
在使用Maven工程的时候,IDEA环境下本地执行代码报错:
Exception in thread "pcMetricsThread" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at com.ucar.spacex.metrics.impl.MetricsSystemImpl.<clinit>(MetricsSystemImpl.java:35)
at com.ucar.spacex.metrics.lib.DefaultMetricsSystem.<init>(DefaultMetricsSystem.java:23)
at com.ucar.spacex.metrics.lib.DefaultMetricsSystem.<clinit>(DefaultMetricsSystem.java:21)
at com.ucar.spacex.metrics.source.JvmMetrics$Singleton.init(JvmMetrics.java:33)
at com.ucar.spacex.metrics.source.JvmMetrics.initSingleton(JvmMetrics.java:91)
at com.ucar.spacex.metrics.CommonMetricsSystem.lambda$main$0(CommonMetricsSystem.java:16)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 7 more
分析
根据报错可知找不到类,但是我们的pom.xml文件明明配置了对应的jar包。
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
根据maven的官方文档可知scope的范围为provided时,第三方jar包是会参与代码的编译,所以本地执行代码应该是可以找到对应的类的,所以问题肯定是出现在IDEA本身,发现应该在执行的时候选中下列的选项,再次执行成功。
参考链接
版权声明:本文为px_dn原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。