invalid LOC header (bad signature)
原來是因為依賴問題,直接依賴“hive-server”的見解依賴jetty-all有沖突;詭異的是在main方法中執行是OK的,但是放到web工程里面就有問題;推測原因是web工程的tomcat的jar包和hive-server的依賴包有沖突。
解決流程:
1. 因為新加入了兩個依賴,hive-jdbc以及hadoop-common;分別注釋,定位hive-jdbc有問題;
2. 將hive-jdbc所有的依賴進行exclude(在eclispse中的pom編輯工具里面右鍵做即可);執行,OK;由此判斷一定是hive-jdbc的依賴有問題;
3. 然后來到pom的文本格式模式;逐個增量的去掉exclude項;直到發現有問題的項(可能不止一個),全部擼一邊,哪些項就是需要排除就像退潮后的裸泳一樣明顯了;
注意:采用eclipse的pom工具進行可視化exclude某個組件的時候,不是僅僅exclude某個依賴,而是所有的依賴都會被刪掉,比如我把hive-server的org.log4j給exclude,那么所有的依賴該組件的依賴都會添加上exclude org.log4j,所以要小心執行這個動作;最好先提交再處理,有問題可以及時回滾。
后來JSP編譯也報錯了;同樣的原因,將hdfs-common里面的servlet-api進行排除即可。這是因為servlet-api已經由容器(tomcat,JBoss等)提供;所以不需要。如果添加上了,反而會在容器中運行的時候發生異常。所以需要進行排除。這個也是為什么MainTest里面運行沒問題,但是放到了Web里面則有問題的原因。
注意,我剛才犯了一個非常低級的錯誤,就是在排除的時候,直接添加<exclution>節點,但是其實是應該添加<exclusions><exclusion>...</exclusion></exclusions>。
其實我只需要hadoop-common這個包,不需要其他依賴;於是(通過“*”來排除所有的依賴):
<dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.6.0</version> <exclusions> <exclusion> <groupId>*</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency>
maven工程有一個地方不太好,每次改pom配置文件,工程重新加載,都會從新寫org.eclipse.wst.common.component文件,結果導致配置的Deployment Assembly內容丟失。