3
votes

Comment résoudre ne peut pas trouver ou charger l'erreur de classe principale avec Spring Boot?

J'ai créé un projet Maven pour Spring Boot. J'ai beaucoup de dépendances Spring et une classe principale:

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

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

    <properties>
        <maven.compiler.release>11</maven.compiler.release>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <mainClass>com.vastserver.MyArtifactApplication</mainClass>
        <descriptorRef>jar-with-dependencies</descriptorRef>
        <targetSnapshot>target/vast-ad-server-artifactId-1.0-SNAPSHOT</targetSnapshot>
        <targetWithDependencies>${targetSnapshot}-${descriptorRef}.jar</targetWithDependencies>
    </properties>

    <groupId>com.vastserver</groupId>
    <artifactId>vast-ad-server-artifactId</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-activemq</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

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

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <archive>
                                <manifest>
                                    <mainClass>${mainClass}</mainClass>
                                </manifest>
                            </archive>
                            <descriptorRefs>
                                <descriptorRef>${descriptorRef}</descriptorRef>
                            </descriptorRefs>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.3.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>exec</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <executable>java</executable>
                    <arguments>
                        <argument>-cp</argument>
                        <argument>${targetWithDependencies}</argument>
                        <argument>${mainClass}</argument>
                    </arguments>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

La structure des dossiers du répertoire src est:

.
└── main
    ├── java
    │   └── com
    │       └── vastserver
    │           └── MyArtifactApplication.java
    └── resources
        └── application.properties

Dans mon pom.xml, j'utilise maven maven-assembly-plugin afin de construire mon projet dans un fichier .jar autonome. Même si j'ai vérifié trois fois que la structure du répertoire et le fichier de classe principale apparaissent correctement dans le pom.xml, je continue à recevoir l'erreur: Error: Could not find or load main class com.vastserver.MyArtifactApplication lorsque mvn package puis java -cp target/vast-ad-server-artifactId-1.0-SNAPSHOT-jar-with-dependencies.jar com.vastserver.MyArtifactApplication ou mvn exec:exec . La classe principale fonctionne si je l'exécute depuis Intellij, donc je sais que le code n'est pas le problème mais plutôt les paramètres de construction de Maven. J'ai perdu là où mon problème pourrait être.

Mon pom.xml ressemble à ceci:

package com.vastserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyArtifactApplication {

    public static void main(String[] args) {

//      SpringApplication.run(MyArtifactApplication.class, args);
        System.out.println("hello!");
    }

}


0 commentaires

6 Réponses :


5
votes

J'ai réalisé que le spring-boot-maven-plugin la construction, donc d'autres plugins ne sont pas nécessaires. Si la section plugins dans maven est modifiée pour:

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

Ensuite, l'exécution mvn package et de java -jar target/vast-ad-server-artifactId-1.0-SNAPSHOT.jar fonctionne.


0 commentaires

1
votes

Je pense que vous devriez vérifier la structure du répertoire de l'artefact qui a été construit par maven. Habituellement, les artefacts de démarrage de printemps sont préparés par un plugin spécial de démarrage de printemps et non par un plugin d'assemblage maven.

Bien qu'il partage le suffixe "jar", ce n'est pas vraiment un fichier jar, il a un chargeur de classe spécial pour charger les classes à partir du dossier BOOT-INF/lib .

J'ai déjà fourni une réponse détaillée sur ce qui se passe exactement lorsque l'application Spring Boot démarre ici, mais en fin de compte, si vous utilisez le plugin d'assemblage, vous devrez préparer à la fois un fichier manifeste et une structure assez compliquée de dossiers. Franchement, je pense que vous devriez utiliser le plugin Spring Boot comme premier recours pour créer des applications Spring Boot.


0 commentaires

4
votes

Pour moi: Maven - Update Project a fonctionné.


0 commentaires

1
votes

maven -> mettre à jour le projet ça marche pour moi


0 commentaires

0
votes

En ajoutant à toutes les réponses ci-dessus, faites un clic droit sur project-> Maven ->update project-> force update

Cela téléchargera toutes les dépendances manquantes.

Toujours si ça ne marche pas ?? pom.xml clic droit sur pom.xml et exécutez comme configuration. Vérifiez que vous utilisez le JRE correct. Ensuite, définissez l'objectif comme installation et exécutez-le.

Version importante vérification java dans pom.xml si elle ne correspond pas à votre version installée JRE puis aussi vous pouvez obtenir cette erreur. Alors assurez-vous que c'est la même chose. Ne fonctionne toujours pas ?? Supprimez le projet de l'espace de travail et réimportez-le .


0 commentaires

0
votes

Rightclickonproject-> Maven-> UpdateProject-> Cochez la case Forcer la mise à jour des Snapshots / Releases-OK

donner le temps de mettre à jour le projet. Ensuite, lancez simplement l'application Rightclickonproject-> Runas-> Spring Boot App


0 commentaires