java - spring-boot 编译使用 jdk 1.7 但运行使用 1.6

标签 java spring-boot java-6

我使用 jdk 1.7 将 spring boot 应用程序编译为 application.jar 文件,但是当我在安装了 jdk 1.6 的机器上运行 application.jar 时,出现此错误

线程“主”java.lang.UnsupportedClassVersionError 中的异常:com/saifiahmada/spring/Application:不支持的 major.minor 版本 51.0

这是我的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.saifiahmada.spring</groupId>
<artifactId>dashboard</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>dashboard tsd</name>
<description>dashboard tsd</description>
<packaging>jar</packaging>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.2.1.RELEASE</version>
</parent>

<properties>
    <webjars-bootstrap.version>3.2.0</webjars-bootstrap.version>
    <webjars-jquery-ui.version>1.9.2</webjars-jquery-ui.version>
    <webjars-jquery.version>2.1.1</webjars-jquery.version>
    <java.version>1.6</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
    <tomcat.version>7.0.59</tomcat.version>
</properties>

<dependencies>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.9</version>
    </dependency>

    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>2.10.4</version>
    </dependency>
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.3.1</version>
    </dependency>

</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <!-- <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration> -->
            <dependencies>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>springloaded</artifactId>
                    <version>1.2.0.RELEASE</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

谢谢

[编辑] 对于@Saurabh,我在我的 pom.xml 中更改了对 spring-boot-starter-data-jpa 的依赖,如下所示:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>javax.transaction</groupId>
                    <artifactId>javax.transaction-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
<dependency>
            <groupId>org.jboss.spec.javax.transaction</groupId>
            <artifactId>jboss-transaction-api_1.1_spec</artifactId>
            <version>1.0.0.Final</version>
</dependency>

最佳答案

您遇到的问题是您的一个依赖项需要一些针对 Java 7 (javax.transaction-api-1.2.jar) 编译的 jar

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

请看一下这个,它描述了如何在 Java 6 上运行 Spring Boot:

http://docs.spring.io/spring-boot/docs/1.2.2.RELEASE/reference/htmlsingle/#howto-use-java-6

重要的一点在这里引用以供引用:

“虽然 Java Transaction API 本身不需要 Java 7,但官方 API jar 包含已构建为需要 Java 7 的类。如果您使用的是 JTA,则需要将官方 JTA 1.2 API jar 替换为一个已经构建为在 Java 6 上工作。为此,排除对 javax.transaction:javax.transaction-api 的任何传递依赖,并将它们替换为对 org.jboss.spec.javax.transaction:jboss-transaction-api_1 的依赖.2_spec:1.0.0.Final"

也可以看看这里:

http://docs.spring.io/spring-boot/docs/1.2.2.RELEASE/reference/htmlsingle/#getting-started-system-requirements

我确实知道您使用的是 Spring Boot 1.2.1,我所有的引用资料都是针对 1.2.2 的,但是这个问题似乎在 1.2.1 中也存在并且 1.2.1 已经无法下载不再,所以你可能要考虑升级。但是你会遇到 Java 6 的麻烦,所以你不妨考虑升级你的环境。

FWIW,您甚至不需要在 pom.xml 中添加这些行:

<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>

关于java - spring-boot 编译使用 jdk 1.7 但运行使用 1.6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28983247/

相关文章:

java - 替代 Java 6 中的路径?

java - 应用程序无法在所有设备上启动

java - 什么是NullPointerException,我该如何解决?

java - 在层架构中重现 SQL 异常并正确处理

java - 方法完成后 PostgreSQL 关闭连接

spring-boot - 如何使用 Spring boot Redis 获取对象空闲时间

linux - 依赖问题 : sun-java6-jdk (bindiff)

java - 难道Java会遇到6's Desktop.browse() likely to be unsupported on any system I'?

java - 如果任何线程中发生异常,则中断所有线程

java - String类中Object的equals方法和自定义类中Object的equal方法有什么区别