Java spring引导编译使用JDK1.7,但运行时使用1.6

Java spring引导编译使用JDK1.7,但运行时使用1.6,java,spring-boot,jdk1.6,Java,Spring Boot,Jdk1.6,我使用JDK1.7将spring引导应用程序编译为application.jar文件,但当我在安装JDK1.6的机器上运行application.jar时,出现了这个错误 线程“main”java.lang.UnsupportedClassVersionError:com/saifiahmada/spring/Application:Unsupported major.minor Version51.0中出现异常 这是我的pom.xml <project xmlns="http://mav

我使用JDK1.7将spring引导应用程序编译为application.jar文件,但当我在安装JDK1.6的机器上运行application.jar时,出现了这个错误

线程“main”java.lang.UnsupportedClassVersionError:com/saifiahmada/spring/Application:Unsupported major.minor Version51.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>

4.0.0
com.saifiahmada.spring
仪表板
0.0.1-快照
仪表板tsd
仪表板tsd
罐子
org.springframework.boot
spring启动程序父级
1.2.1.发布
3.2.0
1.9.2
2.1.1
1.6
UTF-8
UTF-8
${java.version}
${java.version}
7.0.59
org.springframework.boot
SpringBootStarterWeb
org.springframework.boot
弹簧启动装置
org.springframework.boot
弹簧起动试验
测试
org.springframework.boot
spring引导启动器数据jpa
mysql
mysql连接器java
org.apache.poi
poi
3.9
org.scala-lang
scala图书馆
2.10.4
文件上传
文件上传
1.3.1
org.springframework.boot
springbootmaven插件
org.springframework
弹簧负载
1.2.0.1发布

谢谢

[编辑] 对于@Saurabh,我在pom.xml中更改了spring boot starter数据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>

org.springframework.boot
spring引导启动器数据jpa
javax.transaction
javax.transaction-api
org.jboss.spec.javax.transaction
jboss-transaction-api_1.1_规范
1.0.0.1决赛

较新的Java版本与较旧的Java版本兼容,但不是相反。因此,您通常无法在Java6运行时环境中运行使用JDK7编译的代码

确保它在Java6上工作的最佳方法是使用JDK6而不是JDK7来编译代码


这意味着您必须这样做,并确保在编译代码而不是JDK 7时使用它。(注意:Oracle不再支持JDK 6,您仍然可以下载它,但Oracle要求您创建一个帐户以下载它)。

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


org.springframework.boot

此处引用的重要位仅供参考:

“虽然Java事务API本身不需要Java 7,但官方API jar包含的类是为需要Java 7而构建的。如果您使用的是JTA,那么您需要将正式的JTA1.2API jar替换为一个为在Java6上工作而构建的jar。为此,请排除javax.transaction:javax.transaction-api上的任何可传递依赖项,并用org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.0.0.Final上的依赖项替换它们。”

请看这里:

<>我意识到你使用的是Spring Bug 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.version}
${java.version}

您的POM看起来不错。您确定是Maven创建了类文件(也许您也在IDE中打开了项目)?正如@DaveSyer所说,它看起来不是用java 1.6编译的,而是用java 1.7编译的(51.0版表示java 7,请参阅)。也许你是用其他工具构建的。或者你是用
maven clean package
构建的?@MatkoMedenjak:没错,我使用mvn package命令编译这个spring启动应用程序来生成jar文件。谢谢all@DaveSyer:是的,我确信根据我的经验,您完全可以在Java6RU上运行使用JDK7编译的代码有时,只要编译器目标设置为Java 6。好的,但这仍然不会阻止您使用Java 7标准库中存在但Java 6中不存在的API-只有在运行时获得
NoClassDefFoundError
NoSuchMethodError
时,您才会注意到它们。这是正确的。但这不是他看到的,他看到的。”不支持的major.minor版本51.0”,这是一个为Java 7编译的类文件,在本例中是“javax.transaction-api-1.2.jar”“被他的一个下属拉进来。在那之后,如果他使用Java 7 api,很可能会有其他问题,但我们无法从他发布的内容中看出。感谢您的建议和参考,我确实在spring boot starter数据jpa上使用javax.transaction-api替换了pom.xml,并添加了jboss-transaction-api_1.1_规范依赖项,而且,我确实将我的jdk降级为openjdk 6,并使用mvnpackage命令构建我的应用程序,到目前为止,它在jdk6上运行良好,谢谢大家
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>