方法java.lang.Long.compare(x,y)存在于Java 7中,而不存在于Java 6中。因此,如果将使用该方法的代码部署到运行Java6的服务器上,显然会导致NoSuchMethodException。
然而,无论是Maven还是Eclipse,尽管在eclipse中将源代码遵从级别设置为1.6,而maven编译器源和目标设置为1.6,但仍然会发现错误。
除了将我的JRE降级到6之外,有没有一种方法可以在Eclipse中强制执行完全的Java 6遵从性呢?
发布于 2014-02-10 18:10:32
这正是引入动物嗅探器-maven插件的原因:
动物嗅探器提供了一些工具来帮助验证用更新的JDK/API编译的类是否与旧的JDK/API兼容。
发布于 2014-02-10 18:02:23
这就是我在我的战俘里放的。
<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" >
...
<properties>
<java-version>1.6</java-version>
</properties>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
</plugins>
</build>
</project>一旦在POM中定义了这一点,我就右键单击该项目并转到Maven > Update项目。这将将pom中的任何设置应用于eclipse项目,以确保两者是同步的。
就JDK而言,我使用最新的JDK,但编译到较低的版本。我们目前正在使用JDK 7,但是编译为6,这给了您最好的结果,因为编译器仍然将使用与版本6兼容的7引入的任何优化。
发布于 2014-02-10 17:28:22
有一种方法可以使用交叉编译源代码,但最简单的方法是使用min。在开发期间创建工件(JAR等)时需要JDK版本。
->在开发和发布过程中使用JDK 6。
但是,请注意,Oracle的JDK 6已到了生命周期的尽头,如果您没有与Oracle的特殊支持合同(或使用来自不同供应商的JDK ),则强烈建议升级到Java 7。
注意:源级别只确保使用该版本支持的语法结构,目标级别只确保生成的类文件符合指定版本的字节码。
https://stackoverflow.com/questions/21683738
复制相似问题