J'ai essayé de trouver une réponse à ce problème dans des questions similaires, mais je ne sais toujours pas ce qui le cause.
J'ai un projet maven multi-module et j'essaye d'exécuter mvn install
ou package mvn
et j'obtiens l'erreur suivante
Application [INFO] ........................................... ........ SUCCÈS [1,025 s]
[INFO] module-data ..................................... FAILURE [ 0,952 s]
[INFO] module-app ...................................... SKIPPED p>
[ERROR] Échec de l'exécution de l'objectif org.springframework.boot: spring-boot-maven-plugin: 2.1.1.RELEASE: reconditionnement (reconditionnement) sur projet project-data: Exécution reconditionnement de l'objectif org.springframework.boot: spring-boot-maven-plugin: 2.1.1.RELEASE: reconditionnement échec: impossible de trouver la classe principale -> [Aide 1]
Le module project-app
a une classe java dans le dossier src, alors que le module project-data
n'a pas de classe principale. p>
pom.xml parent
<?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"> <parent> <artifactId>app</artifactId> <groupId>com.example</groupId> <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>project-app</artifactId> <dependencies> <dependency> <artifactId>project-data</artifactId> <groupId>com.example</groupId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> </project>
data-projet 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/xsd/maven-4.0.0.xsd"> <parent> <artifactId>app</artifactId> <groupId>com.example</groupId> <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>project-data</artifactId> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> <configuration> <skip>true</skip> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
projet-app 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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <packaging>pom</packaging> <modules> <module>project-data</module> <module>project-app</module> </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>app</artifactId> <version>0.0.1-SNAPSHOT</version> <name>app</name> <description></description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</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-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
J'ai quelque chose de très similaire à la structure de ce projet (sfg-pet-clinic), cependant, après avoir téléchargé et exécuté package mvn
, cela fonctionne très bien. Je ne vois pas beaucoup de différence entre les fichiers pom de mon projet et celui-ci alors que pourrais-je manquer?
5 Réponses :
Je déplacerais toute la section
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
du parent vers le module module-app, car celui-ci est le module unique qui utilise la fonctionnalité de reconditionnement.
De plus, je supprimerais également la section plugin du module-data, car il n'est pas nécessaire de reconditionner ce module.
Merci à @wemu pour la section commentaires.
L'ajout de ceci:
<configuration> <mainClass> ${your.start.Class}</mainClass> </configuration>
à la section plugin est requis sur la version 2.1.1.RELEASE du spring-boot-starter-parent
dépendance, tant que votre classe est dans un autre module.
Le projet sfg-pet-clinic
auquel j'ai fait référence dans ma question utilise une version plus ancienne qui n'a pas besoin du Configuration de
Je ne sais pas qui a voté contre cela. merci d'avoir documenté votre réponse à la question. Si cela répond à votre question, acceptez-le aussi :)
Je ne sais pas pourquoi la bonne réponse est rejetée, mais merci encore @wemu;) Je viens de l'accepter
D'accord, voici comment j'ai résolu ce problème.
Mes étapes étaient:
pom.xml
pour les données de projet en pom à partir de
jar (j'ai utilisé la vue d'ensemble d'Eclipse) pom
dans le fichier pom.xml
pour project-app pour la dépendance du module-data <dependency> <groupId>samee.springframework</groupId> <artifactId>project-data</artifactId> <version>0.0.1-SNAPSHOT</version> <type>pom</type> </dependency>
Ensuite, vous pouvez exécuter votre nettoyage et package / installation
Je viens de changer la version de Spring Boot dans le pom.xml parent de 2.1.1 à 2.0.3 et cela fonctionne.
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent>
Il vaudrait mieux le faire fonctionner en 2.1.1 cependant, mais c'est une solution simple et rapide.
La configuration concerne les anciennes versions de Spring.
Supprimer:
<parent> <artifactId>mc-pet-clinic</artifactId> <groupId>guru.springframework</groupId> <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>pet-clinic-data</artifactId> <properties> <spring-boot.repackage.skip>true</spring-boot.repackage.skip> </properties> ...
À la place, ajoutez cet indicateur ci-dessous pom artifactId
<properties> <spring-boot.repackage.skip>true</spring-boot.repackage.skip> </properties>
Comme ceci:
<configuration> <skip>true</skip> </configuration>
p >
si la classe principale est dans un autre module que le plugin de démarrage, vous pouvez spécifier cette classe principale dans la configuration du plugin: docs.spring.io/spring-boot/docs/current/maven-plugin/...
de rien :)
Lien mis à jour: docs.spring.io/spring- boot / docs / current / maven-plugin / referen ce /…