在Eclipse中使用Java代码调用ant出现的异常

由于项目的需求,需要在Eclipse中使用Java代码直接调用ant。调用的方法如下:

public class AntOperator {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		AntOperator ao=new AntOperator();
		ao.operateAnt("E:/antstudy/build.xml");
	}

	public void operateAnt(String path){
		File buildfile=new File(path);
		Project p=new Project();
		p.init();
		ProjectHelper helper=ProjectHelper.getProjectHelper();
		helper.parse(p, buildfile);
		p.executeTarget(p.getDefaultTarget());
		
	}
}

但是在调用时,出现了如下异常:

Exception in thread "main" E:\antstudy\build.xml:70: Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "F:\Program Files\Java\jre7"
	at org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory.getCompiler(CompilerAdapterFactory.java:130)
	at org.apache.tools.ant.taskdefs.Javac.findSupportedFileExtensions(Javac.java:984)
	at org.apache.tools.ant.taskdefs.Javac.scanDir(Javac.java:961)
	at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:932)
	at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
	at org.apache.tools.ant.Task.perform(Task.java:348)
	at org.apache.tools.ant.Target.execute(Target.java:435)
	at org.apache.tools.ant.Target.performTasks(Target.java:456)
	at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
	at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
	at com.lotuseed.realTimeComputing.learning.ant.test1.AntOperator.operateAnt(AntOperator.java:22)
	at com.lotuseed.realTimeComputing.learning.ant.test1.AntOperator.main(AntOperator.java:13)

网上很多材料说的不够明确,我再看了后想重新整理一下。

首先要明确一个问题,就是ant进行编译时,需要的javac命令是在大家非常熟悉的tools.jar中的。因此,当单独调用ant时,ant会根据系统中设置的JAVA_HOME寻找这个包。但是在Eclipse中,当运行Java程序时,使用的是F:\Program Files\Java\jre7(也就是说使用的是安装jdk时额外安装的jre),在这个jre中是没有这个tools.jar的,因此需要我们手动指定一下。

更改方法:

1.在不改变系统中的jdk和jre的目录内容的条件下,可以这样做:在Eclipse中,window->Preferenced->Java->Installed JREs,这里面就是Eclipse内置的默认的代码运行环境。ant无法执行就是因为这里面没有tools.jar包。现在,选中这个jre,点“Edit”,进入后点击“Add External JARs”,选中JAVA_HOME/lib/tools.jar,然后点“Finish”,点OK。现在就可以运行了。


2.当然也可以将tools.jar包从JAVA_HOME/lib下拷贝到Eclipse默认调用的jre/lib下,然后再按上面的方法添加到里面。


第二种方法:也是比较简单且有效的方法:直接将tools.jar包作为第三方包,直接导入到Eclipse的工程中,并且build path。这样便不会再出现以上的问题了。


归根结底,主要是能够使ant访问到tools.jar包。

如果什么问题,请指出,大家互相交流。

你可能感兴趣的:(java程序设计)