【问题标题】:ClassNotFoundException for class in Eclipse projectEclipse 项目中的类的 ClassNotFoundException
【发布时间】:2015-09-16 12:02:07
【问题描述】:

我有一个调用第三方 API 的程序(专有的,所以我无权访问源代码)。在调用这个 API 的过程中,我得到了一个 ClassNotFoundException,这个类位于我的 Eclipse 项目的 src 文件夹中。我没有对类的加载方式做任何奇怪的事情——整个 src 文件夹都包含在加载的类中。我尝试了多个步骤来弄清楚为什么我会收到这个ClassNotFoundException,包括:

  • 更改类的名称(使用 Eclipse 中的重构功能)
  • 将类移动到与调用 API 的类相同的包中
  • 将我的项目编译成 jar 并将 jar 添加到类路径中
  • 将 jar 放在最终将完成工作的服务器的类路径中(看起来它是通过 RMI 传递的)

代码如下:

public Class DoStuff
{
    ... [stuff]
    Asset asset = new Asset();
    asset.setABunchOfInformation();
    asset.getReadyForImport();
    Asset result = importService.importAsset(asset, importJobInformation);
    ... [more stuff]
}

在 importAsset 方法中我得到了ClassNotFoundException。这是相关的堆栈跟踪:

BaseException
...
Caused by:  java.lang.RuntimeException:  java.lang.ClassNotFoundException:  com.myCompany.product.assets.Asset
    at org.jboss.aop.joinpoint.MethodInvocation.getArguments(MethodInvocation.java:318)
    at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:355)
    at org.jboss.ejb3.session.InvokeableContextClassProxyHack._dynamicInvoke(InvokableContextClassProxyHack.java:53)
    at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:91)
    at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
    at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:967)
    at org.jboss.remoting.transport.socket.ServerThread.completeInvocation(ServerThread.java:791)
    at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:744)
    at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:586)
    at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:234)
Caused by:  java.lang.ClassNotFoundException:  com.myCompany.product.assets.Asset
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.rmi.server.LoaderHandler$Loader.loadClass(LoaderHandler.java:1206)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:274)
    at sun.rmi.server.LoaderHandler.loadClassforName(LoaderHandler.java:1219)
    at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:452)
    at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:185)
    at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:637)
    at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:264)
    at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:214)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1612)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1517)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1350)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
    at java.util.ArrayList.readObject(ArrayList.java:771)
    at sun.reflect.GeneratedMethodAccessor771.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1893)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
    at java.io.ObjecTInputStream.readObject0(ObjectInputStream.java:1350)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
    at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1706)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1344)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
    at java.rmi.MarshalledObject.get(MarshalledObject.java:159)
    at org.jboss.aop.joinpoint.MethodInvocation.getArguments(MethodInvocation.java:309)
    at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:355)
    at org.jboss.ejb3.session.InvokableContextClassProxyHack._dynamicInvoke(InvokableContextClassProxyHack.java:53)
    at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:91)
    at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
    at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:967)
    at org.jboss.remoting.transport.socket.ServerThread.completeInvocation(ServerThread.java:791)
    at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:744)
    at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:586)
    at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:234)
    at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:218)
    at org.jboss.remoting.Client.invoke(Client.java:2084)
    at org.jboss.remoting.Client.invoke(Client.java:879)
    at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:60)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
    at org.jboss.aspects.remoting.ClusterChooserInterceptor.invoke(ClusterChooserInterceptor.java:122)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
    at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:61)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
    at org.jboss.ejb3.security.client.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:65)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
    at org.jboss.ejb3.remoting.ClusteredIsLocalInterceptor.invoke(ClusteredIsLocalInterceptor.java:54)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
    at org.jboss.aspects.remoting.PojiProxy.invoke(PojiProxy.java:62)
    at com.sun.proxy.$Proxy4.invoke(Unknown Source)
    at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHAndlerBase.java:188)
    at com.sun.proxy.$Proxy34.retrieveProcessDefinitionByName(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.commons.beanutils.MethodUtils.invokeExactMethod(MethodUtils.java:403)
    at com.thirdparty.common.services.BaseServices.executeEjbMethod(BaseServices.java:199)
    at com.thirdparty.bpm.services.BusinessProcessServices.executeBPMEjbMethod(BusinessProcessServices.java:689)
    at com.thirdparty.bpm.services.BusinessProcessServices.retrieveProcessDefinitionByName(BusinessProcessServices.java:168)
    at com.myCompany.product.assets.services.ImportServices.submitImportJob(ImportServices.java:2386)
    at com.myCompany.product.assets.services.ImportServices.submitImportJob(ImportServices.java:2348)
    at com.myCompany.product.assets.services.ImportServices.importAssets(ImportServices.java:1145)
    at com.myCompany.product.assets.services.ImportServices.importAsset(ImportServices.java:1092)
    at com.myCompany.product.stuff.DoStuff.doWork(DoStuff.java:243)
    ... (irrelevant trace)

请原谅任何错别字,我必须自己输入。

【问题讨论】:

  • 在eclipse中导入Asset类有没有异常??
  • 资产类是项目的一部分。 com.myCompany.product.assets.Asset
  • 如果我没有错 com.myCompany.product.assets.Asset 是由第三方提供的,而你只有它的类而不是 java 文件正确吗??
  • .java 文件由我和我的团队创建和维护
  • 这意味着当您在任何其他类中导入资产类时,您没有收到任何错误??

标签: java eclipse reflection rmi jboss5.x


【解决方案1】:

看起来您的第三方类依赖于其他 jar,这就是您能够导入它的原因,但是当您调用它的异常时。

【讨论】:

  • 那么我如何判断哪个依赖有依赖呢?堆栈跟踪似乎不是很具体。
  • 看起来第三方的东西 not 有权访问 this jar。
猜你喜欢
  • 2012-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-31
  • 2014-04-18
  • 2013-07-07
相关资源
最近更新 更多