最近两天一直在处理ant运行java程序的一个问题,用IDE直接运行类里面的main函数一切正常,但用ant跑该函数就报错误,错误的原因是运行ant任务时调用的是AntClasloader,而IDE里面调用的是jvm里面的classloader。
如何使ant直接调用jvm的classloader呢?尝试过了很多办法都不行,最后在不经意间设置了fork=true这个属性,结果运行正常了。
在网上查了下fork的资料,ant官方定义是“if enabled triggers the class execution in another VM ”,Ant默认行为是调用运行Ant本身的JVM,然而如果你想要单独地调用编译器,则需要设置fork属性为true。
<java fork="true" classname="xxx" />
以后发现在IDE里面可以运行成功,但在ant里面不能跑成功的,可以加上fork这个属性,这样一般就都可以通过了:)