1.HDFS + WEB 項目 報java.lang.VerifyError... 異常
拋異常:
Exception in thread "main" java.lang.VerifyError: (class: com/google/common/collect/Interners, method: newWeakInterner signature: ()Lcom/google/common/collect/Interner;) Incompatible argument to function
at org.apache.hadoop.util.StringInterner.<clinit>(StringInterner.java:48)
at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:2472)
at org.apache.hadoop.conf.Configuration.loadResources(Configuration.java:2364)
at org.apache.hadoop.conf.Configuration.getProps(Configuration.java:2281)
at org.apache.hadoop.conf.Configuration.get(Configuration.java:888)
at org.apache.hadoop.conf.Configuration.getTrimmed(Configuration.java:907)
at org.apache.hadoop.conf.Configuration.getBoolean(Configuration.java:1308)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:366)
沖突來自 Java_EE_6 中的weld-osgi-bundle.jar 和 guava-11.0.2.jar 這兩個包。 com/google/common/collect/Interners 類是 HDFS在創建FileSystem時所需要使用的一個創建Interner類的工具類,但是 weld-osgi-bundle.jar和guava-11.0.2.jar 存在了一樣的結構,而weld-osgi-bundle.jar中卻不存在Interners類,導致在運行過程中的沖突。
解決方法一:
將web工程應用Java EE 5。筆者的項目使用Java EE 5已經足夠了,如果你們的項目中有使用到Java EE 6的功能可以通過另外導入需要的工具實現。
解決方法二:
將Java EE 6 的包通過 ADD JARs... 的方式導入。
注意:不要將 Java EE 6中的包直接放到WebRoot/WEB-INF/lib 下,這樣同樣會導致包沖突
2.報異常java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.CompilationRe
java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.CompilationResult.getProblems()
這些都是:
Hadoop相關jar中依賴jetty、servlet等第三方jar包和當前項目中的有沖突,
1.如用的maven的話,在pom文件中排除這些jar包后,啟動訪問頁面就正常了:
<dependency>