如何检测编译我的java源文件的编译器的版本

时间:2015-06-03 22:59:05

标签: java

您好我正在编写一个Java类,它在使用java7向上编译时启用了一些功能。 我知道如何从编译的类文件中找到主要/次要幻数。但是我需要找到一种方法来检测编译器编译源代码时的情况。 一个简单的代码片段: ```

public class Hey
{
    public static final boolean JAVA_VER = ???; // how to do this??
    public static foo() {
        if (JAVA_VER >= JAVA7) {
            // use the fancy way introduced in java7
        } else {
            // go with the slow way of java6
        }
    }
}

```

2 个答案:

答案 0 :(得分:0)

编译期间不执行代码。在编译期间,检查语法错误并将其转换为.class文件中的字节代码。代码行可以在运行时执行,因此您可以在代码中找到的唯一内容是Java运行时版本。可以使用java.version系统属性找到Java运行时。这是代码:

    String version = System.getProperty("java.version");

如果要检查java编译器版本,可能那么您可以使用脚本来编译代码。也许你可以有两个不同版本的文件,每个版本适用于一个特定的java版本。在您的脚本中检查可用的Java版本并编译所需的文件版本。您可能希望使用单输出公共输出目录。

答案 1 :(得分:0)

应该是不可能的。编译器要求运行代码的JVM与正在运行的代码具有相同的版本 - 实质上,您无法为较低版本编译它,因为较高版本的代码需要更高版本的编译器。

如果你能解决这个问题,我可能会像前面提到的那样打包一个脚本,或者通过执行字节代码转储(指定主要/次要版本)以编程方式在引导程序中执行,或者使用Process或来自文件字节的源解码。