2016-09-16 5 views
0

Es gibt viele stackoverflow Fragen zu diesem Thema, aber sie scheinen überraschenderweise nicht meine Situation anzugehen.Eclipse + Maven + Spring Anwendung: java.lang.NoClassDefFoundError

Ich habe folgende Dinge bestätigt:

  1. keine widerstreitenden Frühlings-Bibliotheken. Ich verwende die neuesten Releases in Maven Repository
  2. Ich benutze Maven Plugin für Eclipse und es in Eclipse mit Run-Klasse als Java-Anwendung ausführen. Keine Assembly benötigt
  3. Ich habe die JAR-Datei in meinem lokalen Maven-Repository manuell überprüft. Es hat EnvironmentCapable.class auf dem Weg zu erwarten ist,
  4. Es ist eine einfache Anwendung, die aus Kapitel 1 von Spring im Einsatz Buch im Grunde Code ist

Mein pom.xml

<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.springinaction</groupId> 
    <artifactId>knights</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>knights</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.4</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.mockito</groupId> 
     <artifactId>mockito-all</artifactId> 
     <version>1.10.19</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>4.3.2.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>4.3.2.RELEASE</version> 
    </dependency> 
    </dependencies> 
</project> 

Die Hauptklassencode, der nicht ausgeführt wird.

package com.springinaction.knights; 

import org.springframework.context.annotation.AnnotationConfigApplicationContext; 
import org.springframework.context.support.AbstractApplicationContext; 

public class KnightMain { 

    public static void main(String[] args) throws Exception { 

     AbstractApplicationContext context = new AnnotationConfigApplicationContext(KnightConfig.class); 

     Knight knight = (Knight)context.getBean(Knight.class); 
     knight.embarkOnQuest(); 
     context.close(); 
    } 
} 

Wesentlicher Inhalt der Fehler:

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/core/env/EnvironmentCapable 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(Unknown Source) 
    at java.security.SecureClassLoader.defineClass(Unknown Source) 
    at java.net.URLClassLoader.defineClass(Unknown Source) 
    at java.net.URLClassLoader.access$100(Unknown Source) 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) 
+0

Sehen Sie, ob dies hilft http://stackoverflow.com/questions/15840367/java-lang-noclassdeffounderror-after-using-maven-for-the-first-time – Sakalya

+1

Ich denke, Sie mischen einige Gläser Frühling 3 und Frühling 4 wie erwähnt Klasse im Frühjahr 3 –

+0

Ihre Konfiguration funktioniert gut mit mir. anscheinend scheint es, dass dein Klassenpfad eine Spring-Version enthält, die weniger als 3.1.x. – kuhajeyan

Antwort

0

Wenn Sie in Ihrem lokalen Repository einige alte Artefakte bekommen Sie wollen, um loszuwerden, nur dies tun:

  1. Auf Befehlszeile gehen Ordner, in dem sich Ihre pom.xml befindet
  2. Geben Sie den nächsten Befehl ein und führen Sie ihn aus: dependency:purge-local-repository

Dieser Befehl bereinigt Ihr lokales Repository von Abhängigkeiten, die in Ihrem Projekt verwendet werden.

Schauen Sie sich die Beschreibung von Maven Webseite:

enter image description here

nun zu, dass:

  1. Auf Befehlszeile gehen in den Ordner, wo Ihre pom.xml befindet
  2. Art und Führen Sie den nächsten Befehl aus: dependency:copy-dependencies

Schauen Sie sich die Beschreibung von Maven Webseite:

enter image description here

Dieser Befehl aus Remote-Repository die erforderlichen Abhängigkeiten zu Ihrem lokalen Repository ziehen wird.

+0

Das Kopieren der Abhängigkeiten zu meinem lokalen Projektzielordner aus dem lokalen Repository des Maven hat dieses Problem behoben. Bedeutet dies, dass es eine sichere Methode ist, die Abhängigkeiten immer in den Ordner meines Projekts zu kopieren? Ich bin neu damit, bitte ertrage mich hier. – praveent

+0

Sie müssen keine Abhängigkeiten vom lokalen Maven-Repository in Ihren Zielordner kopieren, da dies als eine schlechte Vorgehensweise angesehen wird. Um Maven mit Ihrem Projekt zu synchronisieren, verwenden Sie das m2e-Plugin, wenn Sie den Eclipse-Editor verwenden. Stattdessen verwende ich mvn eclipse: eclipse, welches das Eclipse-Plugin ist, aber dieses Projekt wird eingestellt und sollte nicht mehr verwendet werden. –

+0

Der Befehl 'dependency: copy-dependencies' hat die Abhängigkeiten von meinem lokalen maven-Repository in den Ziel \ -abhängigkeitsordner meines Projekts kopiert. Das ist der Grund, warum ich frage. – praveent

Verwandte Themen