在Eclipse中使用Java代码调用ant出现的异常
2014-07-17 16:01
501 查看
由于项目的需求,需要在Eclipse中使用Java代码直接调用ant。调用的方法如下:
但是在调用时,出现了如下异常:
网上很多材料说的不够明确,我再看了后想重新整理一下。
首先要明确一个问题,就是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包。
如果什么问题,请指出,大家互相交流。
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包。
如果什么问题,请指出,大家互相交流。
相关文章推荐
- Eclipse使用axis2生成客户端调用时最后一步出现an error occurred while completing process -java.lang.reflect.InvocationTargetException
- 使用Eclipse运行Java代码调用JDBC读写MySQL中文变成问号的终极解决办法
- 记一次在JAVA中客户端使用axis调用webservice服务端出现的异常:Unmarshalling Error: For input string: ""
- 使用Eclipse运行Java代码调用JDBC读写MySQL中文变成问号的终极解决办法
- 解决 Eclipse 下使用 Ant 编译出现问题: 警告:编码 GBK 的不可映射字符
- 使用eclipse的JDT实现JAVA代码格式化功能
- 使用Eclipse与Ant进行java程序开发
- 使用Eclipse进行Java开发,用SVN进行版本控制时的异常解决方法
- CXF之使用工厂方法(java代码)发布服务与进行客户端调用
- 在DWR调用的java代码中使用Session,Request,Response等
- 使用MySQL和Hibernate时,出现java.lang.UnsupportedOperationException: Update queries only supported through HQL异常的解决方法
- 9.3 Eclipse中使用Ant(转自:《项目实践精解:基于Struts-Spring-Hibernate的Java应用开发》)
- 使用eclipse调用天气预报的测试代码WSDL
- 使用Eclipse3.2.1+STP.0.4.0+Apache Tuscany开发SCA的Java组件(2)代码篇
- Java 代码调用ANT
- 使用Eclipse调试Java程序代码
- 使用Eclipse与Ant进行java程序开发
- Axis2 Eclipse plugin在eclipse使用时出现:Exception: java.lang.reflect.InvocationTargetException
- java开发环境eclipse的使用(模块代码折叠、可视化开发插件、生成Jar插件)
- Oracle存储过程中执行查询返回的结果集,并使用java代码调用【转】