我有一个Maven Eclipse应用程序,我尝试使用以下命令运行命令提示符:
java -cp target/classes;"target/dependency/*" com.example.Main
不幸的是,它会抛出一个错误:
UnsupportedClassVersionError : unsupported major.minor version 51.0
我做了一些挖掘,发现它与在较新版本的JDK上编译的应用程序有关,而不是它运行的JRE。显然51意味着它是为1.7而建的,但我的计算机上没有JDK 7 ......
所以我确保一切都设置为版本1.6:
root中的system.properties文件包含
java.runtime.version=1.6
添加了maven属性
<java.version>1.6</java.version>
在我的pom.xml中指定了maven编译器插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
我使用返回的命令java -version检查了我的java版本
Java version "1.6.0_38"
Java(TM) SE Runtime Environment (build 1.6.0_38-b05)
Java HotSpot(TM) 64-bit Server VM (build 20.13-b02, mixed mode)
设置maven-compiler-plugin后我的项目更新导致Eclipse自动将编译器级别设置为1.6,项目facet级别为1.6,并将JavaSE-1.6 jre系统库添加到我的项目中。
所以我完全不知道这个JDK 1.7的来源。我从来没有在这台计算机上安装JDK 1.7 ......
另外,最初,maven-compiler-plugin并不存在,所以我想用1.5构建它。但是我做了一个mvn clean install
,然后是一个mvn package
,然后在调整完所有设置后再次尝试命令,它仍然会抛出相同的错误。
答案 0 :(得分:44)
可能你有一个需要Java 1.7的依赖
答案 1 :(得分:14)
您可能正在使用需要Java SE 7的依赖项。
如果是这种情况,要么升级到Java SE 7(如果您在没有支持合同的情况下使用Oracle的JRE,建议使用Java SE 6,那么在2月份达到生命周期结束时)或者替换此依赖关系。