java.lang.classnotfoundnot found exceptionn怎么解决

用IDEA开发spark应用,发生java.lang.ClassNotFoundException的解决
之前的一篇介绍了用IDEA开发spark应用的配置方法。在完成配置之后,我写了下面的demo code。
object LogReg {
def main (args: Array[String]) {
val conf = new SparkConf().setAppName(&spark demo&).setMaster(&spark://master.local:7077&)
val sc = new SparkContext(conf)
// parse the dimension
if (args.length != 1) {
System.err.println(&Need one argument&)
System.exit(-1)
val dimension = Integer.parseInt(args(0))
System.out.println(&Dimension = & + dimension)
// load the training data
val trainData = MLUtils.loadLibSVMFile(sc,
&hdfs://master.local:9000/user/xxxx/input/out5_training.log&,
dimension)
val numIterations = 100
val model = LogisticRegressionWithSGD.train(trainData, numIterations)
val valuesAndPreds = trainData.map { point =&
val prediction = model.predict(point.features)
(prediction, point.label)
val trainErrors = valuesAndPreds.filter{case (v,p) =& v != p}
val trainErr = trainErrors.count.toDouble / trainData.count
System.out.println(&Training error = & + trainErr)
val testData = MLUtils.loadLibSVMFile(sc,
&hdfs://master.local:9000/user/xxxx/input/out5_testing.log&,
dimension)
val testAndPreds = testData.map { point =&
val prediction = model.predict(point.features)
(prediction, point.label)
val testErrors = testAndPreds.filter{case (v,p) =& v != p}
val testErr = testErrors.count.toDouble / testData.count()
System.out.println(&Testing error = & + testErr)
// take the model out
val weights = model.weights
System.out.println(&Weights size = & + weights.size)
编译成功。点击运行,遇到了如下的异常信息。该异常说,有一个类(net.xxxx.spark.LogReg$$anonfun$1)没有被找到。根据异常的前一条消息还可以确定异常在29行抛出。将代码打成jar包,通过spark-submit提交到spark服务器运行,没有抛出异常。
14/11/04 09:47:16 INFO DAGScheduler: Failed to run count at LogReg.scala:40
Exception in thread &main& org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 103.0 failed 4 times, most recent failure: Lost task 0.3 in stage 103.0 (TID 210, 192.168.2.195): java.lang.ClassNotFoundException: net.xxxx.spark.LogReg$$anonfun$1
java.net.URLClassLoader$1.run(URLClassLoader.java:372)
java.net.URLClassLoader$1.run(URLClassLoader.java:361)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(URLClassLoader.java:360)
java.lang.ClassLoader.loadClass(ClassLoader.java:424)
java.lang.ClassLoader.loadClass(ClassLoader.java:357)
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Class.java:344)
org.apache.spark.serializer.JavaDeserializationStream$$anon$1.resolveClass(JavaSerializer.scala:59)
java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1613)
java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1518)
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1774)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1993)
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1918)
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1993)
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1918)
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
scala.collection.immutable.$colon$colon.readObject(List.scala:362)
sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:483)
java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1896)
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1993)
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1918)
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1993)
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1918)
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:62)
org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:87)
org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:57)
org.apache.spark.scheduler.Task.run(Task.scala:54)
org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:177)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
java.lang.Thread.run(Thread.java:745)
Driver stacktrace:
at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1185)
at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1174)
at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1173)
at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:47)
at org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:1173)
at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:688)
at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:688)
at scala.Option.foreach(Option.scala:236)
at org.apache.spark.scheduler.DAGScheduler.handleTaskSetFailed(DAGScheduler.scala:688)
at org.apache.spark.scheduler.DAGSchedulerEventProcessActor$$anonfun$receive$2.applyOrElse(DAGScheduler.scala:1391)
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:498)
at akka.actor.ActorCell.invoke(ActorCell.scala:456)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:237)
at akka.dispatch.Mailbox.run(Mailbox.scala:219)
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:386)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
经过试验,只要更改第3行的代码如下,即可解决问题。
val conf = new SparkConf().setAppName(&spark demo&).setMaster(&spark://master.local:7077&).setJars(List(pathtojar))
谢谢,您的setJars(List(pathtojar))中的paththojar,是什么?
本分类共有文章1篇,更多信息详见
& 2012 - 2016 &
&All Rights Reserved. &
/*爱悠闲图+*/
var cpro_id = "u1888441";2199人阅读
JAVA相关(9)
框架相关(4)
作为一个屌丝程序猿,怎么能不会配置log4j呢,这样在控制台或者日志文件中很容易找到程序出BUG的地方。尤其是在控制台输出日志的时候,那叫一个爽啊!
=-= &但是出现了问题,我擦,启动web的时候spring创建上下文的时候居然会找不到类,我去,检查了一下jar包,spring.jar & spring-web.jar 都有啊,怎么会找不到呢,我的jar包是放在web-inf/lib 下的,要是这样都找不到的话,你要闹哪样!
于是急忙网上搜罗了一下,大多人犯得错误就是,直接通过build path去添加的jar包,这样会导致web启动的时候java.lang.ClassNotFoundException:&org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException:&org.springframework.web.util.Log4jConfigListener
& & 为什么会同时出现这两种错误呢?是应为加载初始化log4j的时候需要使用spring的上下文,由于找不到ContextLoaderListener,所以没办法去初始化加载log4j。于是想到是不是因为没有这个ContextLoaderListener类的jar包啊。感觉看到了光明似的,但是一查看发现,我去,有啊,有这个包啊!这我就顿时无语了。
& & 换了个思路,实在不行,俺就新建个项目,然后把所有的东西都搬迁到新项目中,clean了一下项目,clean一下tomcat,最后发布了一下!T(太)M(萌)D(了)!居然好使了,你们说我能说啥呢?
& & 虽然我的这种解决之道,很无奈,别说科学,甚至连神学都解释不了。没有办法,Java这东西,大家都懂得,头天晚上有问题,回家睡一觉,第二天上班居然好了。这尼玛社么逻辑!没有办法,借此在这里吐槽一下。
对于这类问题的规避,还是建议,大家操作的时候要谨慎,不要什么东西都往项目里面添加,一定要了解你添加的jar包,你需要什么jar包,就添加什么jar包。有时间后添加多了未必有好处。对,你猜对了,jar包冲突也是屌丝程序猿的必修课。
2.解决办法
我就简单的总结一下,这种问题的解决方法:
2.1 缺少jar包
对!如果出现ClassNotFoundException这个错误,你第一反应就是,缺少jar包,说明你还是个合格的程序猿。一般出现这中情况,50%是出现了缺少jar包的问题。
你就可以去调戏一下度娘,问一下,为嘛没有jar包,缺少了什么jar包。
&2.2 jar包的位置导入有问题
我们知道在导入我们自己定义或者封装的jar包是一般是通过build &path 来添加一个jar包,但是当我们用这种方法
导入第三方提供的jar时,web project启动时会出现这种找
不到jar的情况。所以此时你需要手动将需要的jar放到web-inf/lib下,然后clean一下项目,重新发布一下,就OK了。
2.3 jar包冲突
有一部分情况会因为jar包冲突或者jar包的版本不对出现问题。刚出现这个问题的时候,我也以为是版本不对发生了冲突,到官网一看,全是最新的jar包啊,应该不存在冲突!
2.4 其他的情况
应对这种位置的情况,胆寒啊,有木有!最好的方法就是尝试,clean一下项目,重新发布一下。不行的话重启一下机器(当然这个不用担心服务器上,因为服务器上是没有eclipse环境的,有的问题在本地开发的时候会碰到而且不好解决的时候,有时候在服务器上确实好用的)。如果再不行的话,最好的办法就是新建项目,将文件逐个迁移到项目中。在重新搞一下就OK了!
什么!还没搞定,那最后一招了,找你们项目经理或者有经验的同事帮助吧!
3 Java加载顺序
Java虚拟机是根据Java&ClassLoader(类加载器)决定如何加载Class。
系统默认提供了3个ClassLoader&
Root&ClassLoader,ClassPath&Loader,Ext&ClassLoader
我们也可以编写自己的ClassLoader,去加载特定环境下的Jar文件。&
能不能加载Jar,加载哪里的Jar,是由ClassLoader决定的。&
问题可能是&导入的仅仅是jar包的引用,例如在eclipse中通过build&path加进user&lib……(类似快捷方式)
这种在Java&Application中没问题,但在web&Application中可能会出现找不到类的异常。
在WEB&Application中jar包最好放在webroot或webcontent下的lib文件夹内,特别是xml中用到的jar包。
4 log4j的配置
既然牵扯到log4j怎么能不讲它的配置方法搞清楚呢。网上版本众多,当然你也可以去重新那些加载时的init方法,这里推荐的是通过web.xml,使用默认的类加载方式去初始化log4j,比较原生态。web.xml如下:
&?xml version=&1.0& encoding=&UTF-8&?&
&web-app xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance& xmlns=&/xml/ns/javaee& xmlns:web=&/xml/ns/javaee/web-app_2_5.xsd& xsi:schemaLocation=&/xml/ns/javaee /xml/ns/javaee/web-app_2_5.xsd& id=&WebApp_ID& version=&2.5&&
&welcome-file-list&
&welcome-file&login.jsp&/welcome-file&
&/welcome-file-list&
&display-name&springMVC&/display-name&
&servlet-name&spring&/servlet-name&
&servlet-class&
org.springframework.web.servlet.DispatcherServlet
&/servlet-class&
&load-on-startup&1&/load-on-startup&
&/servlet&
&servlet-mapping&
&servlet-name&spring&/servlet-name&
&url-pattern&*.do&/url-pattern&
&/servlet-mapping&
&listener&
&listener-class&org.springframework.web.context.ContextLoaderListener&/listener-class&
&/listener&
&context-param&
&param-name&contextConfigLocation&/param-name&
&param-value&classpath:config/spring/applicationContext.xml&/param-value&
&/context-param&
&!-- log4j配置 --&
&context-param&
&param-name&log4jConfigLocation&/param-name&
&param-value&classpath:config/properties/log4j.properties&/param-value&
&/context-param&
&!-- log4j监听器 --&
&listener&
&listener-class&
org.springframework.web.util.Log4jConfigListener
&/listener-class&
&/listener&  &span style=&font-family: Arial, Helvetica, sans-&&&/web-app&&/span&
对了从上面可以看出我的路径实在src下的config/properties/log4j.properties中
log4j.properties 文件如下
### set log levels ###
log4j.rootLogger = debug ,
### 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern =
%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### 输出到日志文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG ## 输出DEBUG级别以上的日志
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}
[ %t:%r ] - [ %p ]
### 保存异常信息到单独文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/error.log ## 异常日志文件名
log4j.appender.D.Append = true
log4j.appender.D.Threshold = ERROR ## 只输出ERROR级别以上的日志!!!
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}
[ %t:%r ] - [ %p ]
%m%n如果想看详细的配置讲解请访问:http://blog.csdn.net/azheng270/article/details/2173430/ & & & & & & 这里我就不做赘述了。这篇博客有个错误的地方就是
&span style=&font-size:18&&log4j.appender.stdout.layout.ConversionPattern =
%d{ABSOLUTE} %5p %c{1}:%L - %m%n
1的左右是没有空格的,否则会报错&/span&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:16727次
排名:千里之外
原创:21篇
(1)(1)(1)(1)(2)(2)(2)(1)(2)(1)(1)(3)(3)有关java.lang.ClassNotFoundException和Class not found的疑问
调试一个ERP系统时,进行了一些操作后,点击了按钮,然后整个界面没有动作。查看日志文件,看到了下面一段记录:
Exception in thread &Thread-15& nc.bs.framework.exception.FrameworkConnectorException: Read/Witer object error
at nc.n.cli.JavaURLCommunicator.request(JavaURLCommunicator.java:73)
at nc.n.cli.ClientProxyImpl.urlCall(ClientProxyImpl.java:184)
at nc.n.cli.ClientProxyImpl.invoke(ClientProxyImpl.java:135)
at $Proxy6.showMessageAlertFileNameByLogin(Unknown Source)
at nc.ui.pub.msg.MessageReceiveThread$2.run(MessageReceiveThread.java:222)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: NCClassLoader(Cache), Class not found:javax.ejb.EJBException
at nc.bs.framework.codesync.client.NCClassLoader.loadClass(NCClassLoader.java:60)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at nc.n.NetObjectInputStream$NCObjectInputStream.resolveClass(NetObjectInputStream.java:57)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at nc.n.Result.readExternal(Result.java:40)
at java.io.ObjectInputStream.readExternalData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at nc.n.NetObjectInputStream.readObjectOverride(NetObjectInputStream.java:205)
at java.io.ObjectInputStream.readObject(Unknown Source)
at nc.n.NetObjectInputStream.readObject(NetObjectInputStream.java:271)
at nc.n.cli.JavaURLCommunicator.request(JavaURLCommunicator.java:64)
... 5 more
java.lang.ClassNotFoundException是加载类时,没有找到相应的类。在这里,就是NCClassLoader这个类没有找到。而NCClassLoader则是在fw.jar这个包中的。
但是我通过websphere(整个系统是跑在was上的)的“类装入器查看器”发现,fw.jar这个包是已经被装入的
file:/ufida/testnchome1218/nchome/external/lib/fw.jar
而且这个jar包中的确有NCClassLoader这个类。
而那个Class not found的javax.ejb.EJBException是在j2ee.jar这个包中的。而这个包被先后装载了三次
file:/opt/IBM/WebSphere/AppServerNew/lib/j2ee.jar
file:/opt/IBM/WebSphere/AppServerNew/lib/j2ee.jar
file:/ufida/testnchome1218/nchome/lib/j2ee.jar
怀疑这里可能是两个jar包冲突了。删了/ufida/testnchome1218/nchome/lib/j2ee.jar(删/opt/IBM/WebSphere/AppServerNew/lib/j2ee.jar后was就启用不起来了),但是重启后,问题依旧。
希望大家帮忙分析一下,谢谢了。
以下是问题补充:
:后来发现日志中有如下的错误nc.bs.ponentCreateException: Component: nc.itf.uap.pa.PreAlertEJB,Detail Message: remove temp ejb Object error
Caused by: javax.ejb.EJBException: S nested exception is: nc.bs.ponentCreateException: Component: nc.itf.uap.pa.PreAlertEJB,Detail Message: component state is error, state: - causes: populate component property: iPreAlertConfigService with reference: IPreAlertConfigService error: Container: uap,Component: IPreAlertConfigService,Detail Message: state: - causes: The component can't get the Instantiator correctly
应该是部署的过程中出问题了
Class not found:javax.ejb.EJBException
--- 共有 7 条评论 ---
我的意思是包是加载了,问题是被谁加载了?
: 通过websphere的classloader查看器,发现相应的包都加载了。现在怀疑是部署的问题,正在尝试解决。
我大概明白你的问题了,昨天我遇到了相似的问题.
问题的原因是你的类加载器NCClassloader找不到EJBException,意思是说,你的j2ee.jar包,需要让NCClassloader进行加载,具体如何配置你,可以根据这个思路查一查
: 不过我通过was里的类加载查看工具,发现exception所在的j2ee.jar已经被加载上了。还发现不了,难道是部署有问题。不过我已经重新部署过两次了,没报什么错误。
clear project
--- 共有 1 条评论 ---
这玩意没法clear,运行环境上的东西,而且不起作用的是平台自带的节点,而不是后来二次开发的。也怪我没说清楚。
做用友NC的吧。
这个要看是开发环境还是运行环境报的错误了。
--- 共有 1 条评论 ---
是NC,运行环境的,本地用代码跑是没有问题的,想放到测试环境上测一下,可是一直用不了。
一般是部署EJB得问题,尤其是在WAS上跑,你可以先试下用友自己的中间件上跑下,如果没问题的话,那就是Was部署的问题了,最好是把已生成的EJB文件全删除,重新部署一次。
--- 共有 2 条评论 ---
还需要请教一下,删除生成的EJB文件是通过“集成解决方案控制台”的某个节点还是直接删除websphere中某个目录下的文件?以前没接触websphere,网上没搜到(可能是太基础了)。
嗯,应该是was部署的事,昨天翻日志的时候发现了报了EJB生成的异常。我试试把EJB删除再重新部署一下。
遇到过类似问题,在tomcat下可以用classloader.getResource加载jar中的class,但放到websphere下就不行了。后来改为从文件系统中读取class了。很想知道更好的方法(比如本帖提到可能是部署问题)。
直接把jar包路径放到classpath里可以么?
--- 共有 1 条评论 ---
这个我试过,没有起作用,现在看看是不是部署的问题
问题解决了,的确是部署的事。
IPreAlertConfigService生成的有问题,找到了相应的配置文件,更改了一下配置就可以了。
仔细检查一下你Jar包的名字,肯定是包名字大小写错了,或者是xxx.xxx,xxx这里面写错字母了。我也出现过这样的低级问题。JAVAC 是没有问题,一到java class都是这些。好好看代码。还有包名称2008年2月 总版技术专家分月排行榜第一2008年1月 总版技术专家分月排行榜第一
2008年7月 总版技术专家分月排行榜第三2008年6月 总版技术专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。}

我要回帖

更多关于 classcastexception 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信