web-dev-qa-db-ja.com

Spring Boot:次の候補から単一のメインクラスを見つけることができません

Spring Initializer、組み込みTomcat、Thymeleafテンプレートエンジンを使用してSpring Boot Webアプリケーションを生成しました。使用技術: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

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

メインクラスが複数ある場合は、各プロファイルで明示的に メインクラスを構成 する必要があります。

<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 を参照してください

21

または単にプラグイン構成でメ​​インクラスをハードコーディングします。

        <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

Mvn cleanを実行せずにmvn installを実行すると、このエラーが発生することがあります。

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] 

次のエラーが発生する理由の1つは、コード内の複数のメインメソッドです。Springブートでは、同じプロジェクトのすべてのクラスで1つのメインメソッドのみが許可されます。

1
vaquar khan

Start-classプロパティを介して単一のメインクラスを定義する

<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>
1
Eugene Maysyuk

同じエラーが発生しました。 mainを含むApplicationクラスの名前をfoo.Javaからbar.Javaに変更し、クリーンアップして更新しました。ですから、メインは1つしかありませんでした。

ターゲットフォルダーの下の古い生成クラスfoo.classを削除すると、エラーはなくなりました。

0
schoon

public static void main(String[] args)を持つクラスが複数ある場合は、アプリケーションを確認してください。不要なものを削除してください。特に、https://start.spring.io/を使用してプロジェクトを生成する場合、mainメソッドを含むクラスが付属します。

Mainメソッドを持つすべてのクラスが必要な場合は、pomで言及することで、アプリケーションの起動時にどれを追加するかを明示的に指定するだけです。

0
tadtab