次のテストを行いました。
コード
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 bookに書かれている内容に反しています。152 では、基本的な Ant の Java タスクが、「CLASSPATH 環境変数のすべて」などを含む Ant クラスパスで実行されることを確認しています。
では、 forkが「false」に設定されていると、 Ant のJavaタスクが目的のクラスを見つけられず、 forkが「true」に設定されている場合にのみ成功するのはなぜですか?