wake-up-neo.net

Wie kann ich Spring Boot mitteilen, welche Hauptklasse für die ausführbare JAR-Datei verwendet werden soll?

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

Mein Projekt hat mehr als eine Klasse mit einer main Methode. Wie kann ich dem Spring Boot Maven-Plugin mitteilen, welche der Klassen es als Hauptklasse verwenden soll?

164
Thilo

Füge deine Startklasse in deinen Pom ein:

<properties>
    <!-- The main class to start by executing Java -jar -->
    <start-class>com.mycorp.starter.HelloWorldApplication</start-class>
</properties>

oder

<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

Für Benutzer von Gradle (anstelle von Maven):

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

Wenn Sie NICHT das übergeordnete pom für den Spring-Boot-Starter verwenden, lesen Sie in der Spring-Dokumentation :

<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

Wenn Sie Gradle (anstelle von Maven) verwenden, beziehen Sie sich auf hier :

Die Hauptklasse kann auch explizit mit der mainClassName-Eigenschaft der Task konfiguriert werden:

bootJar {
    mainClassName = 'com.example.ExampleApplication'
}

Alternativ kann der Hauptklassenname projektweit mit der Eigenschaft mainClassName des Spring Boot DSL konfiguriert werden:

springBoot {
    mainClassName = 'com.example.ExampleApplication'
}
15
Shane Lu

Wenn Sie Spring-Boot-Starter-Parent in Ihrem Pom verwenden, fügen Sie Ihrem Pom einfach Folgendes hinzu:

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

Dann machen Sie Ihr MVN-Paket.

Siehe diese Seite mit den Frühlingsdokumenten .

Ein sehr wichtiger Aspekt ist hier zu erwähnen, dass die Verzeichnisstruktur src/main/Java/nameofyourpackage sein muss

11
mojave

Ich habe den folgenden Code in pom.xml ausprobiert und es hat bei mir funktioniert

<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

Seit Spring Boot 1.5 können Sie das fehleranfällige String-Literal in pom oder build.gradle vollständig ignorieren. Das Repackaging Tool (via Maven oder Gradle Plugin) wählt das mit @SpringBootApplication für dich. (Weitere Informationen finden Sie in dieser Ausgabe: https://github.com/spring-projects/spring-boot/issues/6496 )

2
tan9

Ich hatte mein Projekt umbenannt und es fand immer noch die alte Klasse Application im Erstellungspfad. Ich habe es aus dem "Build" -Ordner entfernt und alles war in Ordnung.

2
Anthony De Smet

Habe dieses Problem mit Java 1.9 und SpringBoot 1.5.x gesehen, wenn die Hauptklasse nicht explizit angegeben ist.

Mit Java 1.8, es ist in der Lage, Hauptklasse ohne explizite Eigenschaft zu finden und 'MVN-Paket' funktioniert gut.

0
dy10