web-dev-qa-db-fra.com

java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication Maven

J'essaie de créer une application de printemps mvc . Ceci est mon pom.xml

<?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>

lorsque je lance mvn clean install, le fichier .jar est généré mais lorsque je le lance, Java -jar target/test-1.0.0-BUILD-SNAPSHOT.jar

J'ai une erreur 

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

Je ne comprends pas, je n'ai aucune erreur dans Eclipse, je pense que le .jar est dans les dépendances maven

26
Ajouve

Votre fichier jar ne contient pas les dépendances telles que spring-boot, qu'il recherche pendant l'exécution. Vous pouvez créer un fichier jar consolidé avec toutes les dépendances décrites dans cette question .

13
Saket

Si vous souhaitez rester au printemps, placez simplement l'emballage de pom 

<packaging>jar</packaging>

et ajoutez le plug-in spring-boot-maven à vos propriétés de construction dans le fichier pom.xml: 

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

alors une simple commande de package mvn créera un fichier jar exécutable complet.

Voir le très bon doc de référence spring pour plus de détails (style gradle aussi) spring reference doc

12
stoffer

Le mien a été causé par un dépôt Maven corrompu.

J'ai tout supprimé sous C:\Users\<me>\.m2\repository.

Ensuite, une mise à jour Eclipse Maven Update a fonctionné une première fois.

Donc, c'était simplement spring-boot.jar corrompu.

7
David Lavender

Ici, l’emballage est de type jar, vous devez donc utiliser le plugin manifeste, afin d’ajouter des dépendances au fichier Manifest.mf.

Le problème ici est que maven pourrait trouver les dépendances dans le fichier pom, compiler le code source et créer le fichier jar de sortie. Mais lors de l'exécution du fichier jar, le fichier manifest.mf ne contient aucun détail sur les dépendances. Par conséquent, vous avez cette erreur. C'est un cas d'erreurs de classpath.

Ici vous pouvez trouver les détails sur la façon de le faire.

3
Himanshu Bhardwaj

La réponse à la question ci-dessus n’est pas la réponse ci-dessus. Lorsque vous téléchargez un nouveau STS, il ne prend pas en charge la vieille version parent Spring Boot. Il suffit de mettre à jour la version parent avec la dernière version fournie avec STS, cela fonctionnera.

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.8.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

Si vous ne parvenez pas à obtenir la version la plus récente, créez simplement un nouveau projet de démarrage de printemps . Allez dans Fichier -> Nouveau -> Projet de démarrage de printemps et créez un projet de démonstration avec la dernière version parent. . Je le fais à chaque fois que je change de STS. Ce travail pour moi est la solution miracle. Quelqu'un a une autre idée s'il vous plaît partager.

2
user3141256

Nettoyez votre cache Maven et réexécutez:

mvn dependency:purge-local-repository
2
Abdessattar NOISSI

Une autre option consiste à utiliser le plug-in Apache Maven Shade : Ce plugin permet de conditionner l'artefact dans un uber-jar, y compris ses dépendances, et d'ombrer - c.-à-d. .

ajoutez ceci à votre section de plugins de construction

<plugin>
     <groupId>org.Apache.maven.plugins</groupId>
     <artifactId>maven-shade-plugin</artifactId>
</plugin>
1
Francois

J'ai eu le même problème et essayé la plupart des solutions suggérées ci-dessus, mais aucune n'a fonctionné pour moi. Finalement, je reconstruis tout mon référentiel com.springframework (maven) (en supprimant simplement le répertoire .m2/org/springworkframework). 

Cela a fonctionné pour moi.

0
user1693207