Ant无法找到外部定义的taskdef所需的类

我正在尝试使用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中,但即使jar位于“库”定义的路径上,也无法在axis.jar中找到类。

我知道这是一个类路径问题,因为通过将axis.jar符号链接到$ ANT_HOME /

lib,我能够通过DefaultAuthenticator到达其他类。如何获得taskdef来识别/ usr / share /

lib或项目的本地lib目录中的jar文件,而无需将所有符号链接到$ 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中定义这些库的原因,我仍然非常感谢

回答:

通常,这可行。但是您需要非常仔细地检查哪些类在哪里。

阅读FAQ条目以获取更多详细信息。

Ant的类加载器实现使用Java的委托模型

ClassLoader类使用委托模型搜索类和资源。每个ClassLoader实例都有一个关联的父类加载器。当被要求查找类或资源时,ClassLoader实例会将对类或资源的搜索委托给其父类加载器,然后再尝试查找类或资源本身。虚拟机的内置类加载器(称为引导类加载器)本身没有父级,但可以用作ClassLoader实例的父级。

注意:跑步ant -diagnostics 也有帮助。

以上是 Ant无法找到外部定义的taskdef所需的类 的全部内容, 来源链接: utcz.com/qa/402903.html

回到顶部