ClassNotFoundException的疑惑

kevinmy 2011-09-03 03:29:10
小弟初学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中做的)

恳请各位高手指教
...全文
254 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
aqqbjlgu 2011-09-05
  • 打赏
  • 举报
回复
要不试试全部重新编译
小笨熊 2011-09-05
  • 打赏
  • 举报
回复
xfire-core-1.2.6.jar这个jar没有
小笨熊 2011-09-05
  • 打赏
  • 举报
回复
xfire-core-1.2.6.jar这个jar没有
五哥 2011-09-05
  • 打赏
  • 举报
回复
把xfire的jar放到classpath中
magong 2011-09-05
  • 打赏
  • 举报
回复
8楼点子不好用吗?(Java 6下)

或者用Eclipse等IDE算了。
批处理到底还是有点麻烦的。
qybao 2011-09-05
  • 打赏
  • 举报
回复
LZ你是直接执行的?如果直接执行,你要自己一个一个命令去执行,@开头的不需要执行
我给你的脚本,是要你保存成bat文件执行的,即
把上面的脚本拷贝到某个文件,如 sample.bat
然后在dos窗口执行sample.bat

另外,LZ你的jar文件确实是保存在e:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib
路经下吗?
为什么你会说 此时不应有 %%i。
softroad 2011-09-05
  • 打赏
  • 举报
回复
少用ide
kevinmy 2011-09-05
  • 打赏
  • 举报
回复
能完整运行了 谢谢大家
kevinmy 2011-09-05
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 qybao 的回复:]
引用 13 楼 qybao 的回复:
echo %classpath%
打印出来的路径核对一下看看,有没有漏的

set classpath=!classpath!;%%~fi
改成
set classpath=%classpath%;%%~fi

是%号不是!

说错了,还是用!,不过要设置延迟环境变量扩充
即设置 setlocal enabledelayedexpans……
[/Quote]
把这两行换个位置后
java -cp %classpath% cn.com.pansky.webservice.xfire.study.SayHiClient
cd %cur_dir%

终于不是classpath的错误了 谢谢你的耐心回答
但代码有问题
kevinmy 2011-09-05
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 qybao 的回复:]
LZ你是直接执行的?如果直接执行,你要自己一个一个命令去执行,@开头的不需要执行
我给你的脚本,是要你保存成bat文件执行的,即
把上面的脚本拷贝到某个文件,如 sample.bat
然后在dos窗口执行sample.bat

另外,LZ你的jar文件确实是保存在e:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib
路经下吗?
……
[/Quote]

我把你的批处理放到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.
牙痴 2011-09-04
  • 打赏
  • 举报
回复
classPath
kevinmy 2011-09-04
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 qybao 的回复:]
引用 13 楼 qybao 的回复:
echo %classpath%
打印出来的路径核对一下看看,有没有漏的

set classpath=!classpath!;%%~fi
改成
set classpath=%classpath%;%%~fi

是%号不是!

说错了,还是用!,不过要设置延迟环境变量扩充
即设置 setlocal enabledelayedexpans……
[/Quote]

执行批处理的时候就有问题了
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
qybao 2011-09-04
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 qybao 的回复:]
echo %classpath%
打印出来的路径核对一下看看,有没有漏的

set classpath=!classpath!;%%~fi
改成
set classpath=%classpath%;%%~fi

是%号不是!
[/Quote]
说错了,还是用!,不过要设置延迟环境变量扩充
即设置 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
qybao 2011-09-04
  • 打赏
  • 举报
回复
echo %classpath%
打印出来的路径核对一下看看,有没有漏的

set classpath=!classpath!;%%~fi
改成
set classpath=%classpath%;%%~fi

是%号不是!

kevinmy 2011-09-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 qybao 的回复:]
dos脚本sample
用for循环添加jar路径

Java code

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
)
ech……
[/Quote]

好像也不行啊 自己稍微改了一下 还是不行

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加上啊
kevinmy 2011-09-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 qybao 的回复:]
dos脚本sample
用for循环添加jar路径

Java code

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
)
ech……
[/Quote]

谢谢 这个有用
kevinmy 2011-09-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 magong 的回复:]
classpath中最好不要用通配符,一个一个文件写吧。
[/Quote]

好像真是那样 一共有40多个包 那该怎么办?
set classpath=%classpath%;e:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\
这样也不行 难道必须一个一个文件写?
qybao 2011-09-04
  • 打赏
  • 举报
回复
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%
magong 2011-09-04
  • 打赏
  • 举报
回复
一定要用的话,试试看
set classpath=%classpath%;e:\test\apache-tomcat-6.0.14\webapps\stove\WEB-INF\lib\*
magong 2011-09-04
  • 打赏
  • 举报
回复
classpath中最好不要用通配符,一个一个文件写吧。
加载更多回复(5)

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧