簡體   English   中英

Java錯誤的主要版本

[英]Java wrong major version

在我們的hadoop集群上,我的Pig UDF無法抱怨

 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1069: Problem resolving class version numbers for class <classname>

我讀過用豬寫的udf,就像教程一樣 ,問題也很清楚,但是不幸的是我無法解決。 我的清單不包含版本(是否有必要?),盡管我使用1.7進行了編譯,但javap報告的主要版本為52,代表Java 1.8。 那么我該如何解決呢?

我的清單不包含版本(這是必需的嗎?)

版本清單條目與此無關。 類加載器不關注版本清單條目。

並且Javap報告主要版本52,代表Java 1.8,

這是相關的事實。

盡管我用1.7編譯了它。

所有這些都歸結為您如何編譯代碼,並且當您說使用Java 1.7進行編譯時,我認為您是不正確的。

我為什么這么說? 因為Java 1.7 Java編譯器無法使用Java 1.8版本號創建“ .class”文件。 它根本不了解Java 8語法擴展以及對類文件格式的相應增強。

那么我該如何解決呢?

解決此問題的方法是仔細查看您的構建過程,並弄清楚如何以及為什么使用Java 1.8編譯器來編譯有問題的類。 因為毫無疑問,這就是發生了的事情。

如果您是手工構建(例如通過從命令行運行“ javac”和“ jar”,或通過單擊IDE中的按鈕),那么現在是學習諸如Maven,Ant和Gradle之類的構建工具的好時機。


跟進

那不是真的 我的設置證明了這一點,但是我想我發現了問題:.settings / org.eclipse.jdt.core.prefs包含幾個1.8。 條目。 這可能是由於在創建項目時我有1.8。 已安裝。

實際上,它沒有“證明”任何東西……

這說明我可能正在使用Eclipse Java編譯器而不是JDK的Java編譯器進行編譯。

實際上,您的Eclipse編譯器正在(或正在)針對Java 1.8目標進行編譯……因為您的Eclipse設置表明Eclipse Java編譯器應該這樣做。 如果使用Eclipse編譯器來編譯代碼,則JDK或JRE安裝的版本不會確定類文件的版本號。

再次,我強烈建議您學習使用Maven,Ant或Gradle,以便您的構建過程具有更高的可重復性和更少的錯誤發生率。

我想斯蒂芬·C是最籠統的答案。

在我的特殊情況下,問題是項目特定的編譯器合規性設置錯誤,因為在創建項目時我在本地使用了JDK 1.8,后來在群集上收到錯誤時安裝了1.7。

該選項非常隱蔽,可以在以下位置找到: Window > Preferences > Java > Compiler > "Configure project specific settings" > [projectname] > "Compiler compliance level"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM