我试图使用axis-java2wsdl ant任务从我的一个java类创建一个wsdl,但是我无法使类路径正确.
我使用的是Ubuntu的libaxis-java软件包,它在$ ANT_HOME/lib中安装了axis-ant.jar,在/ usr/share/java中安装了axis.jar.我的build.xml的有趣部分如下所示:
details omitted
运行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位于"libraries"定义的路径上
我知道这是一个类路径问题,因为我能够通过符号链接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中无法定义这些库的错误,我仍然非常感激
一般来说,这是有效的.但是你需要仔细检查哪些类在哪里.
如果您的任务类可以加载到类加载器层次结构中更高级别的类加载器(如CLASSPATH或ANT_HOME/lib)中,那么您的classpathref将被忽略.
阅读FAQ条目以获取更多详细信息.
Ant的类加载器实现使用Java的委托模型
ClassLoader类使用委派模型来搜索类和资源.ClassLoader的每个实例都有一个关联的父类加载器.当调用查找类或资源时,ClassLoader实例会在尝试查找类或资源本身之前将对类或资源的搜索委托给其父类加载器.虚拟机的内置类加载器(称为引导类加载器)本身不具有父级,但可以作为ClassLoader实例的父级.
注意:跑步ant -diagnostics
也有帮助.
添加库的Ant 机制是:
通过命令行参数-lib
添加到$ {user.home} /.ant/lib
添加到$ {ant.home}/lib
只要.本手册未提及有关使用system.library.dir属性的任何内容.可能它为此目的几乎被忽略了.
此外,以详细模式运行ant(和-verbose)以查看引擎盖下的操作.