gpt4 book ai didi

java - 默认 java 任务的 Ant 类路径上有什么(fork 设置为 "false")

转载 作者:行者123 更新时间:2023-11-30 05:50:12 24 4
gpt4 key购买 nike

我做了以下测试:

代码

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 中的内容相悖。在 pg 中注明的位置。 152 基本 Ant 的 java 任务与 Ant 类路径一起运行,其中包括“CLASSPATH 环境变量中的所有内容”。

那么当fork设置为“false”时,为什么Ant的java任务找不到想要的类,只有fork才能成功> 即使类在两种情况下都位于 $CLASSPATH 上,也设置为“true”?

最佳答案

fork="false" <java>任务使用特殊的“隔离”类加载器,从任务自己的类路径(classpathref 属性或<classpath> 嵌套元素)加载类,specific set of hard-coded package prefixes 除外。如果在任务自己的类路径中找不到它们,它将尝试从父加载器加载。自 com.sun.xml不在这个硬编码列表中,它不会委托(delegate)给父级,因此会给你一个 ClassNotFoundException .

关于java - 默认 java 任务的 Ant 类路径上有什么(fork 设置为 "false"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14428937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com