Execution default of goal
org.springframework.boot:spring-boot-maven-plugin:1.0.1.RELEASE:repackage
failed:
Unable to find a single main class from the following candidates
Mon projet comporte plusieurs classes avec une méthode main
. Comment puis-je indiquer au plug-in Spring Boot Maven quelle classe elle doit utiliser comme classe principale?
Ajoutez votre classe de départ dans votre pom:
<properties>
<!-- The main class to start by executing Java -jar -->
<start-class>com.mycorp.starter.HelloWorldApplication</start-class>
</properties>
ou
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.mycorp.starter.HelloWorldApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
Pour ceux qui utilisent Gradle (au lieu de Maven):
springBoot {
mainClass = "com.example.Main"
}
Si vous n'utilisez PAS le pom spring-boot-starter-parent, dans le documentation Spring :
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.1.3.RELEASE</version>
<configuration>
<mainClass>my.package.MyStartClass</mainClass>
<layout>Zip</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
Pour ceux qui utilisent Gradle (au lieu de Maven), référencer ici :
La classe principale peut également être configurée explicitement à l’aide de la propriété mainClassName de la tâche:
bootJar {
mainClassName = 'com.example.ExampleApplication'
}
Vous pouvez également configurer le nom de la classe principale dans l'ensemble du projet à l'aide de la propriété mainClassName du Spring DSL:
springBoot {
mainClassName = 'com.example.ExampleApplication'
}
Si vous utilisez spring-boot-starter-parent dans votre pom, vous ajoutez simplement ce qui suit à votre pom:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Ensuite, faites votre paquet MVN.
Voir cette page des documents de printemps .
Un aspect très important ici est de mentionner que la structure de répertoires doit être src/main/Java/nomdevotre paquet
J'ai essayé le code suivant dans pom.xml et cela a fonctionné pour moi
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>myPackage.HelloWorld</mainClass>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<fork>true</fork>
<executable>D:\jdk1.8\bin\javaw.exe</executable>
</configuration>
</plugin>
</plugins>
Depuis Spring Boot 1.5, vous pouvez ignorer le littéral chaîne sujet aux erreurs dans pom ou build.gradle. L'outil de reconditionnement (via maven ou le plugin Gradle) choisira celui annoté avec @SpringBootApplication
pour vous. (Reportez-vous à ce problème pour plus de détails: https://github.com/spring-projects/spring-boot/issues/6496 )
J'avais renommé mon projet et il cherchait toujours l'ancienne classe Application
sur le chemin de génération. Je l'ai enlevé dans le dossier 'build' et tout allait bien.
Vous avez rencontré ce problème avec Java 1.9 et SpringBoot 1.5.x, lorsque la classe principale n'est pas spécifiée explicitement.
Avec Java 1.8, il est capable de trouver la classe principale sans propriété explicite et "mvn package" fonctionne correctement.