如何找到 Eclipse Java 编译器 (JDT) 的版本?

How can I find the version of the Eclipse Java compiler (JDT)?

我用Eclipse Mars编译一个项目。我的理解是 Eclipse 使用它自己的 Java 编译器 (JDT) 来编译 Java 代码。

如何知道 Eclipse 编译器的版本,以便告诉其他人我使用的是什么版本?

我推荐你:

1: How to change JDK version for an Eclipse project

2: changing eclipse's java compiler to jdk7

3: how do I get eclipse to use a different compiler version for Java?

4: http://help.eclipse.org/kepler/index.jsp?topic=%2Forg.eclipse.jst.j2ee.doc.user%2Ftopics%2Ftchangejavalevel.html

ECJ 编译器实际上并没有单独的版本。

Eclipse Project page 上可用的 ECJ 独立下载编号只是与 Eclipse 版本相匹配(因此当前 Eclipse Neon 版本为 4.6)。

编译器本身包含在 org.eclipse.jdt.core 插件中,该插件有自己的版本(当前为 3.12.0)

您需要先进入 Java EE Perspective。为此,转到功能区,然后: Window > 透视 > 打开透视 > 其他 > Java EE.

注意: 如果您没有看到,则表示您没有安装 Java EE 透视图:请在此处查看如何下载它:

How to add Java EE perspective to Eclipse

之后,打开包资源管理器。然后右键单击您的 Java 项目和 select 属性。在属性 window 中,应该有 "Project Facets" 的选项。此页面列出了编译器中所有 Facets 的版本。然后您还可以看到 Java 编译器的版本号。

如果需要更改它,请单击“修改项目”。然后,单击您也想更改的方面。通过从 Facet 名称(Java 编译器)旁边的下拉菜单中 selecting 版本来完成此操作。单击完成,然后单击确定。

希望对您有所帮助!

  1. 对独立 ECJ 使用 command line

    java -jar ecj.jar -version
    

示例:

(应该注意 ECJ 版本和发布的 jar 名称之间的区别。)

  1. 使用 JSR-199 以编程方式执行此操作 api:

    import java.io.File;
    import java.lang.reflect.Method;
    import java.net.URL;
    import java.net.URLClassLoader;
    import java.util.Arrays;
    import java.util.ServiceLoader;
    import javax.tools.JavaCompiler;
    
    public class CompilerVersion {
    
        public static void main(String[] args) throws Exception
        {
    
            // Standalone ECJ from http://repo1.maven.org/maven2/org/eclipse/jdt/ecj/3.13.50/ :
            //jar2classpath("E:\ecj-3.13.50.jar");
    
            // Load JDT Core & Compiler jars from installed Eclipse Oxygen 4.7.0:
            String eclipseDir = "D:\eclipse\";
            jar2classpath(eclipseDir + "plugins\org.eclipse.jdt.core_3.13.0.v20170516-1929.jar");
            jar2classpath(eclipseDir + "plugins\org.eclipse.jdt.compiler.tool_1.2.0.v20170502-0408.jar");
    
            //Class.forName("org.eclipse.jdt.internal.compiler.tool.EclipseCompiler");
    
            JavaCompiler compiler = ServiceLoader.load(JavaCompiler.class).iterator().next();
    
            compiler.getTask(null, null, null, 
                    Arrays.asList(new String[] {"-version"}), null, null).call();
    
        }
    
        private static void jar2classpath(String jarFilename) throws Exception {
            File file = new File(jarFilename);
            Method method = URLClassLoader.class.getDeclaredMethod("addURL", new Class[]{URL.class});
            method.setAccessible(true);
            method.invoke(ClassLoader.getSystemClassLoader(), new Object[]{file.toURI().toURL()});
        }
    
    }
    

    应该输出到stderr:

    Eclipse Compiler for Java(TM) v20170516-1929, 3.13.0, Copyright IBM Corp 2000, 2015. All rights reserved.