gpt4 book ai didi

Java:在使用高版本JDK编译但在低版本JRE上运行时,防止使用高版本API

转载 作者:行者123 更新时间:2023-11-30 08:03:40 26 4
gpt4 key购买 nike

我正在逐步将工作中的项目从 Java 7 迁移到 8

我想分两步完成 - 迁移构建机器,然后迁移运行时机器

但是

即使编译器参数设置为 source=7target=7,似乎在使用 JAVA 8 API 时,如 streams 和 Optional,编译依然顺利通过。显然,当代码在 Java 7 机器上执行时,它会因 ClassNotFoundException中断

这很令人惊讶。 在正确指定的低版本 JRE 上运行时,如何防止使用高版本 API?

最佳答案

找到了一种方法,使用 bootclasspath 特性。

在构建机器中,虽然构建是由 Java 8 编译器完成的,但我指定了 -bootclasspath 参数,提供了 Java 7 rt.jar。

示例(原始):

javac <all-other-params> -bootclasspath /usr/alik/jdk1.7.0_21-rt.jar

Maven 示例:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>7</source>
<target>7</target>
<compilerArguments>
<bootclasspath>/usr/alik/jdk1.7.0_21-rt.jar</bootclasspath>
</compilerArguments>
</configuration>
</plugin>

当开发人员尝试使用 Java 8 API(如 Optional)时,编译最终失败并出现错误:找不到符号类 Optional

关于Java:在使用高版本JDK编译但在低版本JRE上运行时,防止使用高版本API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36137440/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com