美文网首页
运行环境jre版本和jar包编译版本不一致导致:Unsuppor

运行环境jre版本和jar包编译版本不一致导致:Unsuppor

作者: stone_zhu | 来源:发表于2019-03-09 13:09 被阅读0次

    问题

    我在本地使用 Intellij Idea 打包了一个 spark 的程序 jar 包,放到linux集群上运行,报错信息是:Unsupported major.minor version 52.0

    环境

    本机系统 -> windows10 开发工具 -> Intellij Idea 构建工具 -> maven

    集群系统 -> Linux jre -> Java(TM) SE Runtime Environment (build 1.7.0_80-b15)`

    分析

    根据报错 log 可以断定的是由于我本地编译打包所使用的 jdk 版本和 linux 集群的 jre 版本不一致导致的。stanford parser 和 jdk 版本对应关系为:

    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-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>
    
    

    方式二:

     <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 版本以下。

    Intellij Idea 设置「开发」运行时所用的 jdk 版本的几个地方:

    image image image image

    如果上图中 Intellij Idea 的开发运行 jdk 版本配置错误,在开发运行编译的时候会报:Error:java: 无效的源发行版: xx

    相关文章

      网友评论

          本文标题:运行环境jre版本和jar包编译版本不一致导致:Unsuppor

          本文链接:https://www.haomeiwen.com/subject/zzespqtx.html