maven项目图标带红色感叹号(红灯、红点、红线)且保存时无法自动编译(无法生成class文件,提示Error: Could not find or load main class,或者代码改动后输出结果无变化)的解决办法
一句话总结:
可能是由于项目依赖的jar包损坏导致,使用mvn test命令找出哪些jar包损坏,到local repository删除后,再敲一遍mvn test命令,让maven重新下载这些jar包即可解决问题。
解决问题过程:
今天在Eclipse内配置一个新的Maven项目时,出现了问题。在pom.xml中加完dependency后, 项目的图表便带上了两个红点,仔细一看是一个感叹号。
用了一会之后发觉问题更大了,居然更新代码之后输出结果仍旧毫无变化!!比如原来输出Hello World!,我改为Hello World!9898后,按Ctrl+F11运行,输出的仍旧是Hello World!
对于新建的class,运行后则直接提示Error: Could not find or load main class……(如下图)
我把项目整个删了再新建,甚至更换了Eclipse的workspace后再新建项目,问题依旧!最后发现,只要我把pom.xml中的dependencies下的项目全去掉,感叹号立马消失,保存时自动编译的功能也恢复了,于是推测问题肯定是出在项目依赖的jar包,即dependencies上了。估计是由于依赖的jar包有错误,导致项目不能正确编译,所以停止了自动编译。
于是立马进入Command Prompt(即Windows的命令行),cd到maven项目所在文件夹,敲mvn test命令进行test compile,结果输出大量如下语句:
[WARNING] error reading C:\Users\hejin\.m2\repository\org\apache\hadoop\hadoop-yarn-server-common\2.6.0-cdh5.7.6\hadoop-yarn-server-common-2.6.0-cdh5.7.6.jar; invalid LOC header (bad signature)
[WARNING] error reading C:\Users\hejin\.m2\repository\org\apache\hadoop\hadoop-yarn-api\2.6.0-cdh5.7.6\hadoop-yarn-api-2.6.0-cdh5.7.6.jar; invalid LOC header (bad signature)
[WARNING] error reading C:\Users\hejin\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-core\2.6.0-cdh5.7.6\hadoop-mapreduce-client-core-2.6.0-cdh5.7.6.jar; invalid CEN header (bad signature)
[WARNING] error reading C:\Users\hejin\.m2\repository\org\apache\hadoop\hadoop-yarn-common\2.6.0-cdh5.7.6\hadoop-yarn-common-2.6.0-cdh5.7.6.jar; invalid CEN header (bad signature)
[WARNING] error reading C:\Users\hejin\.m2\repository\org\apache\hadoop\hadoop-aws\2.6.0-cdh5.7.6\hadoop-aws-2.6.0-cdh5.7.6.jar; invalid CEN header (bad signature)
[WARNING] error reading C:\Users\hejin\.m2\repository\io\netty\netty-all\4.0.23.Final\netty-all-4.0.23.Final.jar; invalid LOC header (bad signature)
[WARNING] error reading C:\Users\hejin\.m2\repository\org\apache\htrace\htrace-core\3.2.0-incubating\htrace-core-3.2.0-incubating.jar; invalid LOC header (bad signature)
[WARNING] error reading C:\Users\hejin\.m2\repository\org\apache\hadoop\hadoop-hdfs\2.6.0-cdh5.7.6\hadoop-hdfs-2.6.0-cdh5.7.6-tests.jar; invalid LOC header (bad signature)
[WARNING] /C:/Users/hejin/workspace/hbase/src/main/java/hbase/HBaseJavaAPI.java:[35,80] unmappable character for encoding GBK
每一句都是以“[WARNING] error reading”开头,后面跟的全部是项目的依赖jar包。推测是由于教室内网络不好,部分jar包下载不全导致。于是立马到Maven的Repository中去删除了这些有问题的jar包,再重新运行一遍mvn test,就看到如下语句:
Downloading: https://repository.cloudera.com/artifactory/cloudera-repos/org/apache/hadoop/hadoop-mapreduce-client-shuffle/2.6.0-cdh5.7.6/hadoop-mapreduce-client-shuffle-2.6.0-cdh5.7.6.pom
注:Maven Repository的默认位置为:${user.home}/.m2/repository。在maven安装目录下的conf\settings.xml中可设置,设置完成后需到eclipse中启用此设置文件。
表明maven开始重新下载这些jar包。下载完成后,回到Eclipse中再对项目的*文件夹点击右键,选择Refresh,一般问题即可解决!
如果Refresh还无效果,可以再在右键菜单中选择Maven--Update Project(如下图):
之后项目图标顺利摘掉了感叹号!自动编译也恢复正常了!