運行環境jre版本和jar包編譯版本不一致致使:Unsupported major.minor version 52.0

問題

我在本地使用 Intellij Idea 打包了一個 spark 的程序 jar 包,放到linux集羣上運行,報錯信息是:Unsupported major.minor version 52.0java

環境

本機系統 -> windows10 開發工具 -> Intellij Idea 構建工具 -> mavenlinux

集羣系統 -> Linux jre -> Java(TM) SE Runtime Environment (build 1.7.0_80-b15)`apache

分析

根據報錯 log 能夠判定的是因爲我本地編譯打包所使用的 jdk 版本和 linux 集羣的 jre 版本不一致致使的。stanford parser 和 jdk 版本對應關係爲:windows

J2SE 8 = 52,

J2SE 7 = 51,

J2SE 6.0 = 50,

J2SE 5.0 = 49,

JDK 1.4 = 48,

JDK 1.3 = 47,

JDK 1.2 = 46,

JDK 1.1 = 45
複製代碼

能夠推斷出是因爲我打包編譯時所使用的 jdk 版本是 jdk8,而集羣的 jre 是7,才致使的問題。maven

解決方法

maven 項目會用 maven-compiler-plugin 默認的 jdk 版原本進行編譯,若是不指明版本就容易出現版本不匹配的問題,可能致使編譯不經過的問題。解決辦法:在 pom 文件中配置 maven-compiler-plugin 插件。工具

方式一:開發工具

<properties>
        <maven.compiler.target>1.7</maven.compiler.target>
        <maven.compiler.source>1.7</maven.compiler.source>
</properties>

複製代碼

方式二:ui

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
 </build>
複製代碼

一些補充

若是使用 scala 編寫 spark 的程序,在編譯打包時候要注意 scala 的版本號和 jdk 版本的對應關係,同時也要考慮集羣上 jre 的版本。好比個人集羣上所使用的 jre 的版本號爲 7,那麼本機打包編譯的 jdk 版本必須爲 7 ,那麼 scala 版本必須爲 2.12 版本如下。spa

Intellij Idea 設置「開發」運行時所用的 jdk 版本的幾個地方:插件

若是上圖中 Intellij Idea 的開發運行 jdk 版本配置錯誤,在開發運行編譯的時候會報:Error:java: 無效的源發行版: xx

相關文章
相關標籤/搜索