我正在以编程方式使用 Ant 编译一组 Java 文件(使用 javac 任务)。执行 Java 程序时,出现错误:
启动现代编译器时出错
但是,当我从命令提示符而不是通过程序运行相同的 build.xml 时,编译不会出现任何问题。
另一个问题(http://stackoverflow.com/questions/2577790/error-starting-modern-compiler)似乎表明,当 Ant 尝试使用与已加载到 JVM 中的 javac 版本不同的版本时,会导致此错误。但是,我没有指定要使用的任何特定编译器,并且文档(http://ant.apache.org/manual/index.html)似乎建议最好使用加载到 JVM 中的 javac。
该程序在某些机器上运行,但在其他机器上失败,机器之间唯一可辨别的区别是环境变量。该程序需要在几台不同的机器上执行,每台机器的环境变量略有不同。因此改变这些变量不是一个可接受的解决方案。
我想我正在寻找的是某种方式来向 Ant 指定对于 javac 任务,使用当前 JVM 中可用的编译器。
你到底是如何从你的java程序启动ant的?
通过 Java api
File buildFile = new File("build.xml");
Project p = new Project();
...
通过 ant.bat / ant.sh ?
来自像 Eclipse 这样的 IDE?
你使用JDK还是JRE(javac需要tools.jar)?
你在javac任务中使用fork=true吗?
您是否通过 java 使用 ant 和通过命令行使用 ant 使用相同的用户?
使用:
蚂蚁 - 诊断
蚂蚁调试
蚂蚁 - 详细
<echoproperties prefix="ant"/>
<echoproperties prefix="java"/>
获取更多详情。
在出错的机器上,确保 Eclipse Java VM 指向 JAVA_HOME 中指定的相同位置。从很久以前起,我就记得您可以使用 Eclipse 本身内的tools.jar 做一些其他事情来解决这个问题。当旧奶酪再次开始工作时,我会更新我的答案。