当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Ant无法找到外部定义的taskdef所需的类》经验,为你挑选了2个好方法。

我试图使用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中无法定义这些库的错误,我仍然非常感激



1> VonC..:

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

如果您的任务类可以加载到类加载器层次结构中更高级别的类加载器(如CLASSPATH或ANT_HOME/lib)中,那么您的classpathref将被忽略.

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

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

ClassLoader类使用委派模型来搜索类和资源.ClassLoader的每个实例都有一个关联的父类加载器.当调用查找类或资源时,ClassLoader实例会在尝试查找类或资源本身之前将对类或资源的搜索委托给其父类加载器.虚拟机的内置类加载器(称为引导类加载器)本身不具有父级,但可以作为ClassLoader实例的父级.

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



2> OscarRyz..:

添加库的Ant 机制是:

通过命令行参数-lib

添加到$ {user.home} /.ant/lib

添加到$ {ant.home}/lib

只要.本手册未提及有关使用system.library.dir属性的任何内容.可能它为此目的几乎被忽略了.

此外,以详细模式运行ant(和-verbose)以查看引擎盖下的操作.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有