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

来源:互联网 发布:windows机器码 编辑:程序博客网 时间:2024/06/05 04:41

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

public class AntOperator {public static void main(String[] args) {// TODO Auto-generated method stubAntOperator 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包。

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

0 0
原创粉丝点击