2013-12-23 2 views
17

Ich versuche, eine Federmvc-Anwendung zu erstellen. Das ist mein pom.xmljava.lang.ClassNotFoundException: org.springframework.boot.SpringApplication Maven

<?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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.acme</groupId> 
    <artifactId>test</artifactId> 
    <name>springmvc</name> 
    <packaging>jar</packaging> 
    <version>1.0.0-BUILD-SNAPSHOT</version> 
    <properties> 
     <org.springframework-version>3.1.1.RELEASE</org.springframework-version> 
     <org.aspectj-version>1.6.10</org.aspectj-version> 
     <org.slf4j-version>1.6.6</org.slf4j-version> 
    </properties> 

    <repositories> 
     <repository> 
      <id>spring-milestone</id> 
      <url>http://repo.spring.io/libs-milestone</url> 
      <snapshots> 
       <enabled>false</enabled> 
      </snapshots> 
     </repository> 
    </repositories> 

    <pluginRepositories> 
     <pluginRepository> 
      <id>spring-milestone</id> 
      <url>http://repo.spring.io/libs-milestone</url> 
      <snapshots> 
       <enabled>false</enabled> 
      </snapshots> 
     </pluginRepository> 
    </pluginRepositories> 

    <dependencies> 
     <!-- Spring --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>${org.springframework-version}</version> 
      <exclusions> 
       <!-- Exclude Commons Logging in favor of SLF4j --> 
       <exclusion> 
        <groupId>commons-logging</groupId> 
        <artifactId>commons-logging</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>${org.springframework-version}</version> 
     </dependency> 

     <!-- AspectJ --> 
     <dependency> 
      <groupId>org.aspectj</groupId> 
      <artifactId>aspectjrt</artifactId> 
      <version>${org.aspectj-version}</version> 
     </dependency> 

     <!-- Logging --> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>${org.slf4j-version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>jcl-over-slf4j</artifactId> 
      <version>${org.slf4j-version}</version> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>${org.slf4j-version}</version> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.15</version> 
      <exclusions> 
       <exclusion> 
        <groupId>javax.mail</groupId> 
        <artifactId>mail</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>javax.jms</groupId> 
        <artifactId>jms</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>com.sun.jdmk</groupId> 
        <artifactId>jmxtools</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>com.sun.jmx</groupId> 
        <artifactId>jmxri</artifactId> 
       </exclusion> 
      </exclusions> 
      <scope>runtime</scope> 
     </dependency> 

     <!-- @Inject --> 
     <dependency> 
      <groupId>javax.inject</groupId> 
      <artifactId>javax.inject</artifactId> 
      <version>1</version> 
     </dependency> 

     <!-- Servlet --> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>servlet-api</artifactId> 
      <version>2.5</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet.jsp</groupId> 
      <artifactId>jsp-api</artifactId> 
      <version>2.1</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 

     <!-- Test --> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.7</version> 
      <scope>test</scope> 
     </dependency> 

     <!-- Boot --> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
      <version>0.5.0.M6</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-tomcat</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-jetty</artifactId> 
      <version>0.5.0.M6</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-actuator</artifactId> 
      <version>0.5.0.M6</version> 
     </dependency> 


    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-eclipse-plugin</artifactId> 
       <version>2.9</version> 
       <configuration> 
        <additionalProjectnatures> 
         <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature> 
        </additionalProjectnatures> 
        <additionalBuildcommands> 
         <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand> 
        </additionalBuildcommands> 
        <downloadSources>true</downloadSources> 
        <downloadJavadocs>true</downloadJavadocs> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.5.1</version> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
        <compilerArgument>-Xlint:all</compilerArgument> 
        <showWarnings>true</showWarnings> 
        <showDeprecation>true</showDeprecation> 
       </configuration> 
      </plugin> 
      <!-- com.ilppa.cocktail.Application --> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>2.4</version> 
       <configuration> 
        <archive> 
         <manifest> 
          <mainClass>com.ilppa.cocktail.Application</mainClass> 
         </manifest> 
        </archive> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>exec-maven-plugin</artifactId> 
       <version>1.2.1</version> 
       <configuration> 
        <mainClass>org.test.int1.Main</mainClass> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

wenn ich laufe mvn clean install die .jar erzeugt wird, aber wenn ich starten Sie es java -jar target/test-1.0.0-BUILD-SNAPSHOT.jar

Ich habe ein Fehler

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication 
    at com.acme.test.Application.main(Application.java:12) 
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication 
    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.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    ... 1 more 

Ich verstehe nicht, Ich habe keine Fehler in Eclipse, ich denke, die .jar ist in maven dependences

Antwort

10

Ihr Jar enthält keine Abhängigkeiten wie Spring-Boot, nach denen es zur Laufzeit sucht. Sie können ein konsolidiertes jar mit allen Abhängigkeiten erstellen, wie in dieser question beschrieben.

3

Hier ist die Verpackung jar Typ, daher müssen Sie Manifest p verwenden lugin, um dem Manifest Abhängigkeiten hinzuzufügen.

Das Problem hier ist, dass Maven die Abhängigkeiten in der Pom-Datei finden und den Quellcode kompilieren und die Ausgabe jar erstellen könnte. Aber beim Ausführen des Jars enthält die Datei "manifest.mf" keine Details zu Abhängigkeiten. Daher hast du diesen Fehler erhalten. Dies ist ein Fall von Klassenpfadfehlern.

Here finden Sie die Details, wie es geht.

5

Wenn Sie im Frühling Kofferraum bleiben möchten setzen nur die pom Verpackung

<packaging>jar</packaging> 

und fügen Sie die Feder-boot-Maven-Plugin, um jar Sie Eigenschaften in der pom.xml-Datei zu erstellen:

<build> 
    <plugins> 
    <plugin> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-maven-plugin</artifactId> 
    </plugin> 
    </plugins> 
</build> 

dann erstellt ein einfacher mvn-Paketbefehl eine vollständige ausführbare JAR-Datei.

Siehe die sehr gute Federreferenz doc für weitere Einzelheiten (es gradle Stil tun auch) spring reference doc

1

Eine weitere Option ist das die Apache Maven Shade Plugin: Dieses Plugin die Möglichkeit bietet, das Artefakt in einem uber-jar zu verpacken einschließlich seiner Abhängigkeiten und um die Pakete einiger Abhängigkeiten zu schattieren - dh umzubenennen.

fügen Sie diese zu Ihrem Build-Plugins Abschnitt

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-shade-plugin</artifactId> 
</plugin> 
0

Mine von einem korrupten Maven Repository verursacht wurde.

Ich löschte alles unter C:\Users\<me>\.m2\repository.

Dann tat ein Eclipse Maven Update, und es funktionierte zum ersten Mal.

So war es einfach spring-boot.jar wurde beschädigt.

0

Die Antwort auf die obige Frage ist keine der oben genannten. Wenn Sie einen neuen STS herunterladen, wird die OLD Spring Boot Parent Version nicht unterstützt. Aktualisiere einfach die Elternversion, mit dem neuesten STS wird es funktionieren.

Wenn Sie Probleme haben, die neuesten, erstellen Sie einfach ein neues Spring Starter Project. Gehe zu Datei-> Neu -> Spring Start Project Und Erstellen Sie ein Demo-Projekt erhalten Sie die neueste Elternversion, ändern Sie Ihre Version mit dem alles funktioniert. Ich mache das jedes Mal, wenn ich STS ändere. Diese Arbeit für mich und ist die schnelle Lösung. Jeder hat andere Idee teilen Sie bitte.

0

Reinigen Sie Ihre Maven-Cache und Wiederholung:

mvn dependency:purge-local-repository 
Verwandte Themen