2016-03-20 17 views
0

Ich habe ein Problem, aber ich kann nicht herausfinden, die Ursache für dieses Problem, weil der Fehler ziemlich allgemein ist.java.lang.NoClassDefFoundError: Konnte nicht initialisiert werden org.springframework.web.util.NestedServletException

java.lang.NoClassDefFoundError: Could not initialize class org.springframework.web.util.NestedServletException at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:980) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:859) at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:844) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:845) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:583) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1160) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1092) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134) at org.eclipse.jetty.server.Server.handle(Server.java:518) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:308) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:244) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95) at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93) at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:246) at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:156) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572) at java.lang.Thread.run(Thread.java:745)

Das ist meine Projektstruktur:

Project Structure

Es ist nur ein sehr einfaches Projekt, das ich Jetty mit SpringMVC Embedded verwenden.

Dies ist die pom.xml Datei:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>com.biendltb</groupId> 
<artifactId>com.biendltb.world_map</artifactId> 
<version>1.0-SNAPSHOT</version> 
<packaging>jar</packaging> 

<name>com.biendltb.world_map</name> 

<properties> 
    <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <jetty.version>9.3.8.v20160314</jetty.version> 
    <spring.version>4.2.5.RELEASE</spring.version> 
    <servlet.version>2.5</servlet.version> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-web-api</artifactId> 
     <version>7.0</version> 
     <scope>provided</scope> 
    </dependency> 

    <!-- SPRING DEPENDENCY --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aop</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-beans</artifactId> 
     <version>4.2.5.RELEASE</version> 
    </dependency> 


    <!-- JETTY DEPENDENCY --> 
    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-server</artifactId> 
     <version>${jetty.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-servlet</artifactId> 
     <version>${jetty.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-webapp</artifactId> 
     <version>${jetty.version}</version> 
    </dependency> 

    <!-- SERVLET DEPENDENCY --> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>${servlet.version}</version> 
    </dependency> 

    <!-- COMMON LOGGING DEPENDENCY --> 
    <dependency> 
     <groupId>commons-logging</groupId> 
     <artifactId>commons-logging</artifactId> 
     <version>1.1.3</version> 
    </dependency> 
</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
       <compilerArguments> 
        <endorseddirs>${endorsed.dir}</endorseddirs> 
       </compilerArguments> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.6</version> 
      <executions> 
       <execution> 
        <phase>validate</phase> 
        <goals> 
         <goal>copy</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>${endorsed.dir}</outputDirectory> 
         <silent>true</silent> 
         <artifactItems> 
          <artifactItem> 
           <groupId>javax</groupId> 
           <artifactId>javaee-endorsed-api</artifactId> 
           <version>7.0</version> 
           <type>jar</type> 
          </artifactItem> 
         </artifactItems> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.eclipse.jetty</groupId> 
      <artifactId>jetty-maven-plugin</artifactId> 
      <version>9.3.7.v20160115</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.4</version> 
      <configuration> 
       <warSourceDirectory>WebContent</warSourceDirectory> 
       <failOnMissingWebXml>false</failOnMissingWebXml> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>2.4.3</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 
         <createDependencyReducedPom>false</createDependencyReducedPom> 
         <transformers> 
          <transformer 
           implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
           <mainClass>com.biendltb.main_server.TripMapServer</mainClass> 
          </transformer> 
         </transformers> 
         <filters> 
          <filter> 
           <artifact>*:*</artifact> 
           <excludes> 
            <exclude>META-INF/*.SF</exclude> 
            <exclude>META-INF/*.DSA</exclude> 
            <exclude>META-INF/*.RSA</exclude> 
           </excludes> 
          </filter> 
         </filters> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-resources-plugin</artifactId> 
      <version>2.7</version> 
      <dependencies> 
       <dependency> 
        <groupId>org.apache.maven.shared</groupId> 
        <artifactId>maven-filtering</artifactId> 
        <version>1.3</version> 
       </dependency> 
      </dependencies> 
     </plugin> 
    </plugins> 
    <resources> 
     <resource> 
      <targetPath>webapp</targetPath> 
      <directory>src/main/webapp</directory> 
     </resource> 
     <resource> 
      <directory>src/main/resources</directory> 
     </resource> 
    </resources> 
</build> 

Dies ist die main Klasse:

public class TripMapServer { 

    private static final int DEFAULT_PORT = 8080; 
    private static final String CONTEXT_PATH = "/"; 
    private static final String MAPPING_URL = "/*"; 
    private static final String CONFIG_LOCATION = "com.biendltb.config"; 
    private static final String DEFAULT_PROFILE = "dev"; 

    public static void main(String[] args) throws Exception { 
     new TripMapServer().startJetty(getPortFromArgs(args)); 
    } 

    private static int getPortFromArgs(String[] args) { 
     if (args.length > 0) { 
      try { 
       return Integer.valueOf(args[0]); 
      } catch (NumberFormatException ignore) { 
      } 
     } 
     return DEFAULT_PORT; 
    } 

    private void startJetty(int port) throws Exception { 
     Server server = new Server(port); 
     server.setHandler(getServletContextHandler(getContext())); 
     server.start(); 
     server.join(); 
    } 

    private static ServletContextHandler getServletContextHandler(WebApplicationContext context) throws IOException { 
     ServletContextHandler contextHandler = new ServletContextHandler(); 
     contextHandler.setErrorHandler(null); 
     contextHandler.setContextPath(CONTEXT_PATH); 
     contextHandler.addServlet(new ServletHolder("default", new DispatcherServlet(context)), MAPPING_URL); 
     contextHandler.addEventListener(new ContextLoaderListener(context)); 
     contextHandler.setResourceBase(new ClassPathResource("webapp").getURI().toString()); 
     return contextHandler; 
    } 

    private static WebApplicationContext getContext() { 
     AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); 
     context.setConfigLocation(CONFIG_LOCATION); 
     context.getEnvironment().setDefaultProfiles(DEFAULT_PROFILE); 
     return context; 
    } 
} 

Und das ist die Klasse WebConfig.java statt .xml Datei:

@Configuration 
@EnableWebMvc 
@Import({DefaultConfig.class}) 
@ComponentScan(basePackages = {"com.biendltb.controller"}) 
public class WebConfig extends WebMvcConfigurerAdapter{ 
    private static final Charset UTF8 = Charset.forName("UTF-8"); 

    @Autowired 
    public Environment env; 

    @Override 
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { 
     converters.add(stringConverter()); 
    } 

    private StringHttpMessageConverter stringConverter() { 
     StringHttpMessageConverter stringConverter = new StringHttpMessageConverter(); 
     stringConverter.setSupportedMediaTypes(Arrays.asList(new MediaType("text", "plain", UTF8))); 
     return stringConverter; 
    } 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/assets/**").addResourceLocations("classpath:/src/main/resources/").setCachePeriod(Integer.MAX_VALUE); 
     registry.addResourceHandler("/js/**").addResourceLocations("/js/").setCachePeriod(Integer.MAX_VALUE); 
     registry.addResourceHandler("/css/**").addResourceLocations("/css/").setCachePeriod(Integer.MAX_VALUE); 
     registry.addResourceHandler("/img/**").addResourceLocations("/img/").setCachePeriod(Integer.MAX_VALUE); 
    } 

    @Override 
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 
     configurer.enable(); 
    } 

    @Bean 
    public InternalResourceViewResolver getInternalResourceViewResolver() { 
     InternalResourceViewResolver resolver = new InternalResourceViewResolver(); 
     resolver.setPrefix("/src/main/resources/pages/"); 
     resolver.setSuffix(".jsp"); 
     return resolver; 
    } 
} 

Bitte helfen Sie herauszufinden, die Ursache oder wie Sie diesen Fehler verfolgen.

Vielen Dank!

Antwort

0

Sie vermissen eine Klasse zur Laufzeit. Debuggen Sie den Start und setzen Sie einen Ausnahme-Breakpoint auf NoClassDefFoundError. Dann sehen Sie, welche Klasse nicht gefunden werden kann. Suchen Sie in Ihrer IDE oder im Internet nach dieser Klasse, um herauszufinden, welche Abhängigkeit Ihnen fehlt.

+0

Hallo Stefan, das Problem ist in meinem Spring Controller passiert, als ich ein ModelAndView zurückgebe. Das Problem liegt in der tieferen Ebene von SpringMVC, daher kann ich hier nur die try catch-Ausnahme festlegen. Aber es kommt auch nicht klar auf den Fehler. Ich denke, das Problem könnte in meiner SpringMVC-Konfiguration liegen. Wie auch immer, danke für deine Hilfe :) – biendltb

+0

Hallo, ich bekomme den gleichen Fehler, was war die Einstellung, die dir geholfen hat ?? – polavishnu

0

Ich schlage vor, Sie löschen Ihre .m2 Ordner, Es kann vorkommen, dass einige der JAR-Dateien während des Downloads beschädigt sind.

Bitte kommentieren Sie, wenn es Ihnen nicht geholfen hat!

+0

Vielen Dank für Ihren Rat, aber es kann immer noch nicht mein Problem lösen :( – biendltb

Verwandte Themen