SpringBoot: невозможно найти один основной класс из следующих кандидатов

Я создал веб-приложение Spring Boot, используя Spring Initializer, встроенный Tomcat, механизм шаблонов Thymeleaf. Используемые технологии: Spring Boot 1.4.2.RELEASE, Spring 4.3.4.RELEASE, Thymeleaf 2.1.5.RELEASE, Tomcat Вставить 8.5.6, Maven 3, Java 8

У меня есть приложение SpringBoot. с этими 2 классами:

@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);
    }

}

Я генерирую войну с помощью этой команды

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

Но я получил эту ошибку:

[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]

Ответ 1

Если у вас более одного основного класса, вам нужно явно настроить основной класс в каждом профиле:

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

См. Spring-boot: repackage

Ответ 2

или просто жесткий код основного класса в конфигурации плагина.

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

Ответ 3

Иногда эта ошибка возникает, когда вы устанавливаете mvn без выполнения mvn clean.

Ответ 4

[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] 

Одной из возможных причин получения следующей ошибки является более чем один главный метод в вашем коде, Spring boot позволяет использовать только один основной метод для всех классов в одном проекте.

Ответ 5

Определите один основной класс через свойство начального класса

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

В качестве альтернативы, определите основной класс в Spring-Boot-Maven-плагин

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

Ответ 6

Проверьте ваше приложение, если у вас есть несколько классов с public static void main(String[] args). Удалите тот, который вам не нужен. Особенно, если вы генерируете проект с помощью https://start.spring.io/ он поставляется с классом с основным методом.

Если вам нужны все классы с методом main, просто укажите, какой из них будет захвачен при запуске приложения, упомянув его в pom.

Ответ 7

У меня была такая же ошибка. Я переименовал свой класс Application, содержащий main из foo.java, в bar.java, очистил и обновил. Так что у меня был только один главный.

Ошибка исчезла, когда я удалил старый сгенерированный класс, foo.class в целевой папке.

Ответ 8

Из командной строки вы можете использовать

... -Dstart-class=com.your.package.application.BookApplication