ant javac任务使用哪个javac.exe?

3

我遇到了一个问题。我在我的电脑上重命名了javac.exe,但是发现ant的javac任务仍然可以正常工作。

有人知道它是从哪里获取javac.exe的吗?


1
你有没有看过它的文档 - Guillaume Polet
3
它很可能附带了它自己的副本。出于好奇,你为什么重新命名javac? - Hunter McMillen
2
检查您的系统路径和Java路径。它可能会从那里选择javac.exe。类似的事情也发生在我身上。我安装了jdk6和jdk7,但是jdk7的bin文件夹在系统路径中,因此它正在从那里选择java.exe。 - Bharat
@RBK 我已经到处查找了(包括天上地下:)),但仍然找不到我的机器上的javac。 - CommonMan
@Manan,现实中确实存在一些问题。 - ant
显示剩余3条评论
2个回答

6
实际上,我相信Ant默认尝试直接使用以下代码执行Java编译器类:
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);
        }
    }

这段代码来自这里

也就是说,如果Ant的当前类路径上有库tools.jar,它将会检索到该类并启动它。这意味着javac.exe可以被重命名为任何你想要的名称,它仍然能够正常工作。因此,回答你的问题,实际上没有执行任何一个"javac.exe"。

还有其他的Javac任务实现,但我认为这是所有编译器1.3+的默认实现。


这不是孤立的现象。我相信Tomcat也会做同样的事情来编译JSP,如果我没记错的话。 - Patrice M.

-1
你可以尝试从这里开始,并检查全局build.compiler属性的配置,它可能指向其他地方。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接