小弟初学webservice,碰到一个错误:E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\classes>java cn.com.pansky.we
bservice.xfire.study.SayHiClient
Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/xfire/se
rvice/binding/ObjectServiceFactory
        at cn.com.pansky.webservice.xfire.study.SayHiClient.main(SayHiClient.jav
a:14)
Caused by: java.lang.ClassNotFoundException: org.codehaus.xfire.service.binding.
ObjectServiceFactory
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        ... 1 more
我完全是手写开发,没用到eclipse,直接在tomcat的webapp目录下建的项目,出现上面错误后,我找到了ObjectServiceFactory这个类,是在xfire-core-1.2.6.jar这个包中,而我已经把这个包放到了lib目录下,为什么会出现上面的错误呢?为什么会找不到类?还有就是在手写程序的时候,如果有些类是在jar包中的,而类SayHiClient.java中用到了jar包中的几个类,
import org.codehaus.xfire.client.Client;  
import org.codehaus.xfire.client.XFireProxyFactory;  
import org.codehaus.xfire.service.Service;  
import org.codehaus.xfire.service.binding.ObjectServiceFactory;  
import org.codehaus.xfire.transport.http.CommonsHttpMessageSender;  
我该如何让其通过编译呢? (我编译老是出错,所以编译放到了eclipse中做的)恳请各位高手指教

解决方案 »

  1.   

    xfire-core-1.2.6.jar这个包应该是没有放到aar文件对应的lib包当中
      

  2.   

    命令行运行程序的话,类路径应该要自己加的,如:
    java -cp xfire-core-1.2.6.jar cn.com.pansky.we
    bservice.xfire.study.SayHiClient
    嫌麻烦的话,从Eclipse中运行吧。
      

  3.   

    也是一样的,这样编译
    javac -cp xfire-core-1.2.6.jar SayHiClient.java
      

  4.   


    set path=%path%;e:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\*.jar
    set classpath=%classpath%;e:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\*.jarE:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\classes>java cn.com.pansky.we
    bservice.xfire.study.SayHiClient
    Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/xfire/se
    rvice/binding/ObjectServiceFactory
            at cn.com.pansky.webservice.xfire.study.SayHiClient.main(SayHiClient.jav
    a:14)
    Caused by: java.lang.ClassNotFoundException: org.codehaus.xfire.service.binding.
    ObjectServiceFactory
            at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
            ... 1 more我把lib下所有jar包都加入到path classpath中 但还是报这个错误 到底是怎么回事
      

  5.   

    classpath中最好不要用通配符,一个一个文件写吧。
      

  6.   

    一定要用的话,试试看
    set classpath=%classpath%;e:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\*
      

  7.   

    dos脚本sample
    用for循环添加jar路径
    set cur_dir=%cd%
    cd e:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib
    for /f %%i in ('dir /B *.jar') do (
        set classpath=!classpath!;%%~fi
    )
    echo %classpath%
    java -cp %classpath% xxx
    cd %cur_dir%
      

  8.   


    好像真是那样 一共有40多个包 那该怎么办?
    set classpath=%classpath%;e:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\
    这样也不行 难道必须一个一个文件写?
      

  9.   


    好像也不行啊 自己稍微改了一下 还是不行set cur_dir=%cd%
    cd e:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib
    for /f %%i in ('dir /B *.jar') do (
        set classpath=!classpath!;%%~fi
    )
    echo %classpath%
    cd %cur_dir%
    java -cp %classpath% cn.com.pansky.webservice.xfire.study.SayHiClient它直接找不到SayHiClient了 我对批处理不懂 是不是没有把原来的classpath加上啊
      

  10.   

    echo %classpath%
    打印出来的路径核对一下看看,有没有漏的

    set classpath=!classpath!;%%~fi
    改成
    set classpath=%classpath%;%%~fi是%号不是!
      

  11.   

    说错了,还是用!,不过要设置延迟环境变量扩充
    即设置 setlocal enabledelayedexpansion
    @echo off
    setlocal enabledelayedexpansion
    set cur_dir=%cd%
    cd e:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib
    for /f %%i in ('dir /B *.jar') do (
        set classpath=!classpath!;%%~fi
    )
    echo %classpath%
    java -cp %classpath% cn.com.pansky.webservice.xfire.study.SayHiClient
    cd %cur_dir%
    @echo on
      

  12.   


    执行批处理的时候就有问题了
    E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\classes>@echo off
    setlocal enabledelayedexpansion
    set cur_dir=%cd%
    cd e:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib
    for /f %%i in ('dir /B *.jar') do (
    此时不应有 %%i。
        set classpath=!classpath!;%%~fi
    )
    echo %classpath%
    !classpath!;%%~fi
    java -cp %classpath% cn.com.pansky.webservice.xfire.study.SayHiClient
    Exception in thread "main" java.lang.NoClassDefFoundError: cn/com/pansky/webserv
    ice/xfire/study/SayHiClient
    Caused by: java.lang.ClassNotFoundException: cn.com.pansky.webservice.xfire.stud
    y.SayHiClient
            at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    Could not find the main class: cn.com.pansky.webservice.xfire.study.SayHiClient.
      Program will exit.
    cd %cur_dir%
    @echo on
      

  13.   

    LZ你是直接执行的?如果直接执行,你要自己一个一个命令去执行,@开头的不需要执行
    我给你的脚本,是要你保存成bat文件执行的,即
    把上面的脚本拷贝到某个文件,如 sample.bat
    然后在dos窗口执行sample.bat另外,LZ你的jar文件确实是保存在e:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib
    路经下吗?
    为什么你会说 此时不应有 %%i。
      

  14.   

    8楼点子不好用吗?(Java 6下)或者用Eclipse等IDE算了。
    批处理到底还是有点麻烦的。
      

  15.   


    我把你的批处理放到addToCP.bat中,并执行但还是报错
    E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\classes>addToCP.bat
    .;C:\oraclexe\app\oracle\product\10.2.0\server\bin;.;C:\Java\jdk1.6.0_26\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\S
    ystem32\Wbem;D:\apache-ant-1.8.2\bin;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\jstl.jar;E:\test\apache-tomc
    at-6.0.14\webapps\stove\WEB-INF\lib\standard.jar;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\activation-1.1.j
    ar;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\commons-codec-1.3.jar;E:\test\apache-tomcat-6.0.14\webapps\sto
    ve\WEB-INF\lib\commons-httpclient-3.0.jar;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\commons-logging-1.0.4.j
    ar;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\jaxen-1.1-beta-9.jar;E:\test\apache-tomcat-6.0.14\webapps\stov
    e\WEB-INF\lib\jdom-1.0.jar;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\stax-api-1.0.1.jar;E:\test\apache-tomc
    at-6.0.14\webapps\stove\WEB-INF\lib\stax-utils-20040917.jar;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\wsdl4
    j-1.6.1.jar;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\wstx-asl-3.2.0.jar;E:\test\apache-tomcat-6.0.14\webap
    ps\stove\WEB-INF\lib\xfire-aegis-1.2.6.jar;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\xfire-core-1.2.6.jar;E
    :\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\xfire-all-1.2.6.jar;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB
    -INF\lib\xmlsec-1.3.0.jar;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\bcprov-jdk15-133.jar;E:\test\apache-tom
    cat-6.0.14\webapps\stove\WEB-INF\lib\commons-attributes-api-2.1.jar;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\l
    ib\commons-beanutils-1.7.0.jar;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\commons-discovery-0.2.jar;E:\test\
    apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\jaxb-api-2.0.jar;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\j
    axb-impl-2.0.1.jar;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\jaxb-xjc-2.0.1.jar;E:\test\apache-tomcat-6.0.1
    4\webapps\stove\WEB-INF\lib\jaxws-api-2.0.jar;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\jetty-6.1.2rc0.jar;
    E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\jetty-util-6.1.2rc0.jar;E:\test\apache-tomcat-6.0.14\webapps\stov
    e\WEB-INF\lib\jmock-1.0.1.jar;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\jsr173_api-1.0.jar;E:\test\apache-t
    omcat-6.0.14\webapps\stove\WEB-INF\lib\junit-3.8.1.jar;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\mail-1.4.j
    ar;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\opensaml-1.0.1.jar;E:\test\apache-tomcat-6.0.14\webapps\stove\
    WEB-INF\lib\saaj-api-1.3.jar;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\saaj-impl-1.3.jar;E:\test\apache-tom
    cat-6.0.14\webapps\stove\WEB-INF\lib\servlet-api-2.3.jar;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\servlet-
    api-2.5-6.1.2rc0.jar;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\spring-1.2.6.jar;E:\test\apache-tomcat-6.0.1
    4\webapps\stove\WEB-INF\lib\wss4j-1.5.1.jar;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\xbean-2.2.0.jar;E:\te
    st\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\xbean-spring-2.8.jar;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-IN
    F\lib\xercesImpl-2.6.2.jar;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\xfire-jsr181-api-1.0-M1.jar;E:\test\ap
    ache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\xml-apis-1.0.b2.jar;E:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\
    XmlSchema-1.1.jar
    Exception in thread "main" java.lang.NoClassDefFoundError: cn/com/pansky/webservice/xfire/study/SayHiClient
    Caused by: java.lang.ClassNotFoundException: cn.com.pansky.webservice.xfire.study.SayHiClient
            at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    Could not find the main class: cn.com.pansky.webservice.xfire.study.SayHiClient.  Program will exit.
      

  16.   

    把这两行换个位置后
    java -cp %classpath% cn.com.pansky.webservice.xfire.study.SayHiClient
    cd %cur_dir%终于不是classpath的错误了 谢谢你的耐心回答
    但代码有问题