我正在尝试使用 axis-java2wsdl ant 任务从我的一个 java 类创建一个 wsdl,但我无法正确获取类路径。
我正在使用 Ubuntu 的 libaxis-java 包,它将axis-ant.jar 安装在$ANT_HOME/lib 中,将axis.jar 安装在/usr/share/java 中。我的 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 符号链接到$ANT_HOME/lib 中,我能够通过DefaultAuthenticator 到其他未找到的类。如何在不将所有内容符号链接到 $ANT_HOME/lib 的情况下让 taskdef 识别 /usr/share/lib 或我项目的本地 lib 目录中的 jar 文件?
编辑:
我终于能够用这一行成功生成 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 中定义这些库,我仍然会非常感激