我从Java类中以编程方式启动Ant:
File buildFile= new File("buildAppl.xml");
if (!buildFile.exists()) {
return false;
}
Project p = new Project();
p.setUserProperty("ant.file", buildFile.getAbsolutePath());
p.setProperty("java.home", "C:\Program Files\Java\jdk1.6.0_37");
p.addBuildListener(logger);
try {
p.fireBuildStarted();
p.init();
ProjectHelper helper = ProjectHelper.getProjectHelper();
p.addReference("ant.projectHelper", helper);
helper.parse(p, buildFile);
p.executeTarget("build");
p.fireBuildFinished(null);
} catch (BuildException e) {
p.fireBuildFinished(e);
return false;
}
当我用eclipse调试它时,我得到以下错误:
X:updatejTagbuild buildappls .xml:114:执行这一行时发生以下错误:X:updatejTagproject buildappls .xml:107:无法使用SUN rmic,因为它不可用。一个常见的解决方案是设置环境变量JAVA_HOME
我检查了以下内容:
- 环境变量JAVA_HOME和PATH设置正确
- eclipse首选项"Installed JREs"默认为C:Program FilesJava jdk1.6.0_37
- 项目属性"java. exe"home"被设置为"C:Program FilesJavajdk1.6.0_37"(见上文)
构建文件中rmic任务的描述如下:
<rmic base="${classDirClient}" debug="true" classname="x.y.z.ProcessingServiceRmiImpl">
<classpath>
<fileset refid="classpathClient"/>
</classpath>
</rmic>
<rmic base="${classDirClient}" debug="true" classname="x.y.z.RmiXmlMessengerClient">
<classpath>
<fileset refid="classpathClient"/>
</classpath>
</rmic>
当在Eclipse中交互式运行Ant时,它可以正常运行。
我能做些什么来避免这个错误?
从Java 5开始,不再需要rmic
。Java 5及以后版本中的RMI系统可以使用动态代理而不是静态预编译的存根进行操作,因此只有在必须支持Java 1.4或更早版本的客户机时才需要rmic
。