복붙노트

[SPRING] Spring Boot : 다음 후보들 중에서 하나의 메인 클래스를 찾을 수 없습니다.

SPRING

Spring Boot : 다음 후보들 중에서 하나의 메인 클래스를 찾을 수 없습니다.

Spring Initializer, Tomcat, Thymeleaf 템플릿 엔진을 사용하여 Spring Boot 웹 애플리케이션을 생성했습니다. 사용 된 기술 : Spring 부트 1.4.2.RELEASE, Spring 4.3.4.RELEASE, Thymeleaf 2.1.5.RELEASE, Tomcat Embed 8.5.6, Maven 3, Java 8

스프링 부트 앱이 있습니다. 다음 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. ==============================

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

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

    3.때때로 mvn clean을하지 않고 mvn install을 할 때이 오류가 발생합니다.

    때때로 mvn clean을하지 않고 mvn install을 할 때이 오류가 발생합니다.

  4. ==============================

    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] 
    

    다음 오류가 발생하는 한 가지 가능한 이유는 코드에서 하나 이상의 주요 메소드입니다. 스프링 부트는 같은 프로젝트의 모든 클래스에서 하나의 기본 메소드 만 허용합니다.

  5. ==============================

    5.시작 클래스 속성을 통해 단일 메인 클래스 정의

    시작 클래스 속성을 통해 단일 메인 클래스 정의

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

    또는, spring-boot-maven-plugin에서 메인 클래스를 정의하십시오

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

    6.public static void main (String [] args)를 가진 클래스가 여러 개있는 경우 응용 프로그램을 검사하십시오. 필요없는 것을 제거하십시오. 특히 https://start.spring.io/로 프로젝트를 생성하면 main 메소드가있는 클래스가 함께 제공됩니다.

    public static void main (String [] args)를 가진 클래스가 여러 개있는 경우 응용 프로그램을 검사하십시오. 필요없는 것을 제거하십시오. 특히 https://start.spring.io/로 프로젝트를 생성하면 main 메소드가있는 클래스가 함께 제공됩니다.

    main 메소드를 가진 모든 클래스가 필요하다면, 애플리케이션 시작시에 pom에 언급하여 어느 것이 봇 트랩 될 것인지 명시 적으로 언급하십시오.

  7. ==============================

    7.나는 같은 오류가 있었다. main을 포함하는 Application 클래스의 이름을 foo.java에서 bar.java로 변경하고 정리하고 업데이트했습니다. 그래서 나는 단 하나의 메인을 가지고있다.

    나는 같은 오류가 있었다. main을 포함하는 Application 클래스의 이름을 foo.java에서 bar.java로 변경하고 정리하고 업데이트했습니다. 그래서 나는 단 하나의 메인을 가지고있다.

    대상 폴더 아래에서 이전에 생성 된 클래스 foo.class를 삭제하면 오류가 사라졌습니다.

  8. from https://stackoverflow.com/questions/42840576/springboot-unable-to-find-a-single-main-class-from-the-following-candidates by cc-by-sa and MIT license