web-dev-qa-db-fra.com

Comment indiquer à Spring Boot la classe principale à utiliser pour le fichier jar exécutable?

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?

164
Thilo

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>
248
ludo_rj

Pour ceux qui utilisent Gradle (au lieu de Maven):

springBoot {
    mainClass = "com.example.Main"
}
124
Marcelo C.

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>
67
Renaud

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'
}
15
Shane Lu

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

11
mojave

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>
4
TRIDIB BOSE

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 )

2
tan9

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.

2
Anthony De Smet

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.

0
dy10