gpt4 book ai didi

java - Ant 找不到外部定义的 taskdef 所需的类

转载 作者:搜寻专家 更新时间:2023-10-30 19:40:11 27 4
gpt4 key购买 nike

我正在尝试使用 axis-java2wsdl ant 任务从我的一个 java 类创建 wsdl,但我无法获得正确的类路径。

我正在使用 Ubuntu 的 libaxis-java 包,它在 $ANT_HOME/lib 中安装 axis-ant.jar,在/usr/share/java 中安装 axis.jar。我的 build.xml 中有趣的部分如下所示:

<property name="library.dir" value="lib"/>
<property name="system.library.dir" value="/usr/share/java"/>
<path id="libraries">
<fileset dir="${library.dir}">
<include name="*.jar"/>
</fileset>
<fileset dir="${system.library.dir}">
<include name="*.jar"/>
</fileset>
</path>

<target name="genwsdl" depends="compile">
<taskdef resource="axis-tasks.properties" classpathref="libraries"/>
<axis-java2wsdl>
details omitted
</axis-java2wsdl>
</target>

运行 ant genwsdl 结果:

/build.xml:50: taskdef A class needed by class
org.apache.axis.tools.ant.wsdl.Wsdl2javaAntTask
cannot be found: org/apache/axis/utils/DefaultAuthenticator

Ant 能够找到 axis-java2wsdl 任务的定义,因为 axis-ant.jar 在 $ANT_HOME/lib 中,但它无法在 axis.jar 中找到类,即使那个 jar 在定义的路径上“图书馆”

我知道这是一个类路径问题,因为通过将 axis.jar 符号链接(symbolic link)到 $ANT_HOME/lib,我能够通过 DefaultAuthenticator 进入其他未找到的类。如何让 taskdef 识别/usr/share/lib 或我项目的本地 lib 目录中的 jar 文件,而不将所有内容符号链接(symbolic link)到 $ANT_HOME/lib?

编辑:

我终于能够用这一行成功生成 wsdl:

ant -lib /usr/share/java/axis.jar -lib /usr/share/java/jaxrpc.jar -lib /usr/share/java/wsdl4j.jar -lib /usr/share/java/commons-logging.jar -lib /usr/share/java/commons-discovery.jar -lib build genwsdl

如果有人能告诉我我做错了什么,无法在 build.xml 中定义这些库,我将非常感激

最佳答案

一般来说,这是有效的。但是你需要非常仔细地检查哪些类在哪里。

如果您的任务类可以加载到类加载器层次结构中更高层的类加载器中(例如 CLASSPATH 或 ANT_HOME/lib),那么您的类路径引用将被忽略

阅读FAQ entry了解更多详情。

Ant's class loader implementation uses Java's delegation model

The ClassLoader class uses a delegation model to search for classes and resources. Each instance of ClassLoader has an associated parent class loader. When called upon to find a class or resource, a ClassLoader instance will delegate the search for the class or resource to its parent class loader before attempting to find the class or resource itself. The virtual machine's built-in class loader, called the bootstrap class loader, does not itself have a parent but may serve as the parent of a ClassLoader instance.

注意:运行 ant -diagnostics can help too .

关于java - Ant 找不到外部定义的 taskdef 所需的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/482303/

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