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!"); } }
6 Réponses :
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.
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.
Pour moi: Maven - Update Project a fonctionné.
maven -> mettre à jour le projet ça marche pour moi
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 .
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