简体   繁体   中英

Which javac.exe is used by ant javac task?

I am facing one problem. I renamed javac.exe on my machine and noticed that ant javac task still works fine.

Does anybody know from where its getting javac.exe?

Actually, I believe, that by default Ant tries to execute the java compiler class directly with this code:

try {
        Class c = Class.forName ("com.sun.tools.javac.Main");
        Object compiler = c.newInstance ();
        Method compile = c.getMethod ("compile",
            new Class [] {(new String [] {}).getClass ()});
        int result = ((Integer) compile.invoke
                      (compiler, new Object[] {cmd.getArguments()}))
            .intValue ();
        return (result == MODERN_COMPILER_SUCCESS);

    } catch (Exception ex) {
        if (ex instanceof BuildException) {
            throw (BuildException) ex;
        } else {
            throw new BuildException("Error starting modern compiler",
                                     ex, location);
        }
    }

The code came from here .

Which means that if the library tools.jar is on the current classpath of Ant, it will pickup the class and launch it. This results in the fact that javac.exe can be renamed to whatever you want, it will still work. So to answer your question, it actually executes none of any "javac.exe".

There are other implementations of the Javac task, but I think this is the default one for all compilers 1.3+

您可以尝试从这里开始并检查全局build.compiler属性中配置的build.compiler ,它可能指向其他位置

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM