java - 无法启动 WAR,嵌套异常是 java.lang.NoClassDefFoundError :

标签 java eclipse spring maven rmi

我在一个项目中使用了以下相关技术:

  • 专家
  • Spring
  • Java EE
  • Java RMI

在我的项目中,我有一个初始化类,我称之为ìnitService。该服务负责启动程序稍后将使用的主要结构。如果失败,则程序失败。

在这个initService 中,我尝试设置一个RMI 服务器和一个客户端。到目前为止,这只是相当于一个“helloWorld”。为了实现这个目的,我有一个接口(interface)和一个实现类:

public interface ICommunicator extends Remote{
    public boolean askNewVM() throws RemoteException;
    public boolean commitingSuicide() throws RemoteException;
}

public class RMICommunicator extends UnicastRemoteObject implements ICommunicator{

    private static final long serialVersionUID = 1L;

    public RMICommunicator() throws RemoteException {
        super();
    }

    @Override
    public boolean askNewVM()  throws RemoteException{
        return false;
    }

    @Override
    public boolean commitingSuicide()  throws RemoteException{
        return false;
    }

}

到目前为止一切顺利。然后我尝试使用 mvn install 命令编译并生成 war 文件,它运行没有问题。

然而,当我将生成的 war 文件部署到我的服务器并尝试使用 Jetty 8.0 启动它时,问题就出现了。当我这样做时,由于以下错误,服务器无法启动:

[ERROR][context.ContextLoader]: Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'initService': Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: net/jnd/thesis/service/loadBalancer/RMICommunicator
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:135)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:394)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1448)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:384)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)
    at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:782)
    at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:424)
    at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:774)
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:249)
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1242)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:717)
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:494)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:39)
    at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:186)
    at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:494)
    at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:141)
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:145)
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:56)
    at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:615)
    at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:540)
    at org.eclipse.jetty.util.Scanner.scan(Scanner.java:403)
    at org.eclipse.jetty.util.Scanner.doStart(Scanner.java:337)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider.doStart(ScanningAppProvider.java:121)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at org.eclipse.jetty.deploy.DeploymentManager.startAppProvider(DeploymentManager.java:555)
    at org.eclipse.jetty.deploy.DeploymentManager.doStart(DeploymentManager.java:230)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at org.eclipse.jetty.util.component.AggregateLifeCycle.doStart(AggregateLifeCycle.java:81)
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:58)
    at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:96)
    at org.eclipse.jetty.server.Server.doStart(Server.java:282)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
    at org.eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.java:1274)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:1197)
    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.eclipse.jetty.start.Main.invokeMain(Main.java:473)
    at org.eclipse.jetty.start.Main.start(Main.java:615)
    at org.eclipse.jetty.start.Main.main(Main.java:96)
Caused by: java.lang.NoClassDefFoundError: net/jnd/thesis/service/loadBalancer/RMICommunicator
    at net.jnd.thesis.service.loadBalancer.VMManager.<init>(VMManager.java:83)
    at net.jnd.thesis.service.loadBalancer.VMManager.getInstance(VMManager.java:104)
    at net.jnd.thesis.service.loadBalancer.LoadBalancerService.start(LoadBalancerService.java:50)
    at net.jnd.thesis.service.InitializationService.start(InitializationService.java:68)
    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.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:346)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:299)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:132)
    ... 53 more
Caused by: java.lang.ClassNotFoundException: net.jnd.thesis.service.loadBalancer.RMICommunicator
    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 java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:430)
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:383)
    ... 64 more

我已经研究过这个论坛的类似问题,但没有成功。但是,我确实找到了这篇关于该问题的文章:

通过阅读它,我相信(尽管我可能错了)我的问题是第 12 步中描述的问题:

12) Java program can also throw java.lang.NoClassDefFoundError during linking which occurs during class loading in Java. One of the example of this scenario is just delete the User class from our static initializer failure example after compilation and they try to run the program. This time you will get java.lang.NoClassDefFoundError directly without java.lang.ExceptionInInitializerError and message for NoClassDefFoundError is also just printing name of class as testing/User i.e. User class from testing package. Watch out for this carefully as here root cause is absent of User.class file.

Read more: http://javarevisited.blogspot.com/2011/06/noclassdeffounderror-exception-in.html#ixzz2z8cNlxZ9

我认为我没有遗漏任何 jar ,所以我认为这是一个与其他任何 jar 一样好的猜测。我该如何解决我的问题?

最佳答案

首先将您的 *.war 重命名为 *.zip 并查看编译后的类是否存在。

否则,请尝试在您的 IDE 中进行 maven > 更新,并确保将 maven 依赖项添加到类路径中。我有时会遇到这些 NoClassDev 错误,在更新和类路径检查后一切正常。

关于java - 无法启动 WAR,嵌套异常是 java.lang.NoClassDefFoundError :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23130658/

相关文章:

java - 如何根据向导第一页中所做的选择来呈现页面

java - 无法在拦截器中 Autowiring 字段

spring security 5.1 oauth 2,如何向用户身份验证uri添加附加参数

java - 为什么我在 Windows 任务管理器中看到 Eclipse 为 'javaw.exe'?

c++ - 是什么导致 Eclipse CDT Unresolved inclusion : <iostream>

java - 如果我们在指定时间内没有收到响应,如何关闭 API 连接

java.lang.ClassNotFoundException : org. glassfish.jersey.server.internal.inject.ExtractorException

ruby-on-rails - `const_get' : uninitialized constant [class] (NameError)` after file save in Docker with Spring

java - 拆分 Gradle 中的所有输出目录

Java (Tomcat) : how to configure a cookieless subdomain to serve static content