我做了以下测试:
代码
public class FooMain {
public static void main(String args[]) throws ClassNotFoundException {
Class klass = Class.forName("com.sun.xml.internal.ws.spi.ProviderImpl");
}
}
$CLASSPATH 环境变量
echo $CLASSPATH
/usr/lib/jvm/java-7-openjdk-i386/jre/lib/rt.jar:.
jar tvf /usr/lib/jvm/java-7-openjdk-i386/jre/lib/rt.jar | grep com.sun.xml.internal.ws.spi.ProviderImpl
1742 Wed Oct 24 18:52:52 EEST 2012 com/sun/xml/internal/ws/spi/ProviderImpl$1.class
1349 Wed Oct 24 18:52:52 EEST 2012 com/sun/xml/internal/ws/spi/ProviderImpl$2.class
12412 Wed Oct 24 18:52:52 EEST 2012 com/sun/xml/internal/ws/spi/ProviderImpl.class
所以寻找的类在 $CLASSPATH 上。
但是,在 Ant 的java任务和fork设置为"false"的情况下运行上述代码会失败,并且只有在fork设置为"true"时才会成功。
然而,这与ANT in Action 书中所写的内容背道而驰,该书在 pg 中注明。152 基本 Ant 的 java 任务使用 Ant 类路径运行,其中包括“CLASSPATH 环境变量中的所有内容”。
那么为什么当 fork 设置为“false”时,Ant 的 java 任务不能找到所寻找的类,并且只有当fork设置为“true”时才能成功,即使在这两种情况下类都在 $CLASSPATH 上?