[英]Compile with current Java Runtime (7u45) and run on Runtime Version 1.6.0
我想知道是否可以使用当前的JRE 7u45开发程序,然后在具有IBM J9 VM build 2.4,JRE 1.6.0的AS400上运行它。 还是我必须使用1.6.0 JRE来开发程序? 只要我不使用稍后介绍的命令,程序就可以工作,不是吗?
如果您对API足够谨慎,则可以使Java 7编译器生成与Java 6兼容的字节码,但这不是默认行为。
我必须补充一点,这似乎不是明智的举动。 API会以微妙的方式以及显着的方式进行更改,并且在Java编译器上设置“合规级别”参数不会阻止您调用JDK 6中不存在的任何方法。
有两个问题在起作用:
1)您不能使用任何新的Java 7功能并尝试生成1.6字节码。 使用-source 1.6 -target 1.6
可以解决此问题。 如果这样做,它将呕吐(例如,使用菱形运算符; List<String> foo = new ArrayList<>()
)
2)您不能使用新的类或在1.7中添加到类的新方法。 它将正常编译,然后在运行时在1.6 JVM上失败。 这是一个棘手的问题。 使用maven来构建您的项目以及animal-sniffer
插件可以解决此问题:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<compilerArgument>-Xlint:all</compilerArgument>
</configuration>
</plugin>
<plugin>
<!-- ensure that only methods available in java 1.6 can
be used even when compiling with java 1.7+ -->
<groupId>org.codehaus.mojo</groupId>
<artifactId>animal-sniffer-maven-plugin</artifactId>
<version>1.9</version>
<configuration>
<signature>
<groupId>org.codehaus.mojo.signature</groupId>
<artifactId>java16</artifactId>
<version>1.1</version>
</signature>
</configuration>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
我每天都这样做。
绝对确定代码可以正常运行而不会意外使用不存在的功能的最好方法是使用Java 6进行开发。 对于正在安装Java 6 JDK并将其添加到Eclipse JRE首选项的eclipse。
请注意,内置文件支持不支持CCSID。 请改用jt400.jar中的IFSFile。
另外,如果使用JAVA或RUNJVA调用程序,则可以使用SystemDefaults.properties提供系统属性和JVM参数。 检查信息中心。
您应该使用JDK
而不是JRE
。
另外,请使用1.6.0
而不是1.7
因为1.7版中的某些功能是1.6版不支持的 。
在编译程序时,您需要使用“ -target”标志并将其设置为1.6
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.