web-dev-qa-db-de.com

Spring Boot: Von den folgenden Kandidaten kann keine einzige Hauptklasse gefunden werden

Ich habe eine Spring Boot-Webanwendung mit Spring Initializer, eingebettetem Tomcat und Thymeleaf-Vorlagenmodul erstellt. Verwendete Technologien: Spring Boot 1.4.2.RELEASE, Spring 4.3.4.RELEASE, Thymeleaf 2.1.5.RELEASE, Tomcat Embed 8.5.6, Maven 3, Java 8

Ich habe eine SpringBoot-App. mit diesen 2 Klassen:

@Profile("!war")
@SpringBootApplication
@Import({SecurityConfig.class ,PersistenceConfig.class, ServiceConfig.class})
public class BookApplication {

    public static void main(String[] args) {
        SpringApplication.run(BookApplication.class, args);
    }
}

@Profile("war")
@Import({SecurityConfig.class ,PersistenceConfig.class})
@SpringBootApplication
public class BookApplicationWar extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(BookApplicationWar.class);
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(BookApplicationWar.class, args);
    }

}

Ich generiere den Krieg mit diesem Befehl

 mvn clean package -DskipTests -Dspring.profiles.active=pebloc,war -DAPP-KEY=pebloc

Aber ich habe diesen Fehler bekommen:

[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.5.2.RELEASE:repackage (default) on project book: Execution default of goal org.springframework.boot:spring-boot-maven-plugin:1.5.2.RELEASE:repackage failed: Unable to find a single main class from the following candidates [com.tdk.BookApplication, com.tdk.BookApplicationWar] -> [Help 1]
10

Wenn Sie mehr als eine Hauptklasse haben, müssen Sie explizit die Hauptklasse in jedem Profil konfigurieren:

<profiles>
    <profile>
        <id>profile1</id>
        <properties>
          <spring.boot.mainclass>com.SomeClass</spring.boot.mainclass>
        </properties>
    </profile>
    <profile>
        <id>profile2</id>
        <properties>
          <spring.boot.mainclass>com.SomeOtherClass</spring.boot.mainclass>
        </properties>
    </profile>
</profiles>

...

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>1.5.2.RELEASE</version>
    <executions>
      <execution>
        <goals>
          <goal>repackage</goal>
        </goals>
        <configuration>
          <mainClass>${spring.boot.mainclass}</mainClass>
        </configuration>
      </execution>
    </executions>
    ...
</plugin>

Siehe spring-boot: Umpacken

21

oder einfach die Hauptklasse in der Plugin-Konfiguration hart codieren.

        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                    <configuration>
                        <mainClass>your.main.class.MainClass</mainClass>
                    </configuration>
                </execution>
            </executions>
        </plugin>
6

Manchmal wird dieser Fehler ausgegeben, wenn Sie mvn installieren, ohne mvn clean auszuführen.

3
yılmaz
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.5.2.RELEASE:repackage (default) on project book: Execution default of goal org.springframework.boot:spring-boot-maven-plugin:1.5.2.RELEASE:repackage failed: Unable to find a single main class from the following candidates [com.tdk.BookApplication, com.tdk.BookApplicationWar] 

Ein möglicher Grund für den Fehler bei der Fehlerbehebung sind mehrere Hauptmethoden im Code. Spring Boot lässt nur eine Hauptmethode für alle Klassen in demselben Projekt zu.

1
vaquar khan

Definieren Sie eine Hauptklasse über die Eigenschaft start class

<properties>
      <start-class>com.may.Application</start-class>
</properties>

Alternativ können Sie die Hauptklasse im Spring-Boot-Maven-Plugin definieren

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <mainClass>com.may.Application</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>
1
Eugene Maysyuk

Ich hatte den gleichen Fehler. Ich hatte meine Anwendungsklasse, die main enthält, von foo.Java in bar.Java umbenannt, gereinigt und aktualisiert. Ich hatte also immer nur eine Hauptleitung.

Der Fehler wurde behoben, als ich die alte generierte Klasse foo.class unter dem Zielordner löschte.

0
schoon

Überprüfen Sie Ihre Anwendung, wenn Sie mehrere Klassen mit public static void main(String[] args) haben. Entfernen Sie den, den Sie nicht benötigen. Insbesondere wenn Sie das Projekt mit https://start.spring.io/ generieren, wird eine Klasse mit einer Hauptmethode mitgeliefert. 

Wenn Sie alle Klassen mit der Hauptmethode benötigen, geben Sie einfach explizit an, welche Klasse beim Start der Anwendung verwendet werden soll, indem Sie sie im Pom erwähnen. 

0
tadtab