一句話總結:
可能是由於項目依賴的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(如下圖):
之后項目圖標順利摘掉了感嘆號!自動編譯也恢復正常了!