環境
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本身,發現應該在執行的時候選中下列的選項,再次執行成功。