web-dev-qa-db-ja.com

実行可能jarに使用するメインクラスをSpring Bootにどのように指示しますか?

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

私のプロジェクトはmainメソッドを持つ複数のクラスを持っています。 Spring Boot Mavenプラグインにメインクラスとしてどのクラスを使うべきかをどうやって伝えるのですか?

160
Thilo

Pomにスタートクラスを追加してください。

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

(Mavenの代わりに)Gradleを使っている人のために:

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

Spring-boot-starter-parent pomを使用しない場合は、 Springのドキュメント から。

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

(Mavenの代わりに)Gradleを使っている人は、ここで を参照してください

メインクラスは、タスクのmainClassNameプロパティを使って明示的に設定することもできます。

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

あるいは、Spring Boot DSLのmainClassNameプロパティを使用して、プロジェクト全体でメインクラス名を設定できます。

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

Pomでspring-boot-starter-parentを使用している場合は、Pomに次のコードを追加するだけです。

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

それからmvnパッケージを実行してください。

このSpringのドキュメントページ を参照してください。

ここで非常に重要な点は、ディレクトリ構造はsrc/main/Java/nameofyourpackageでなければならないことを言及することです。

10
mojave

私はpom.xmlで以下のコードを試してみました、そしてそれは私のために働きました

<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>
3
TRIDIB BOSE

Spring Boot 1.5以降、pomまたはbuild.gradleでエラーが発生しやすい文字列リテラルを完全に無視できます。再パッケージ化ツール(mavenまたはgradleプラグイン経由)は、あなたのために@SpringBootApplicationでアノテーションが付けられたものを選びます。 (詳しくはこの号を参照してください。 https://github.com/spring-projects/spring-boot/issues/6496

1
tan9

私は自分のプロジェクトの名前を変更しましたが、それでもビルドパスに古いApplicationクラスが見つかりました。私はそれを 'build'フォルダから削除しましたが、すべて問題ありませんでした。

1
Anthony De Smet

Main-classが明示的に指定されていないときに、Java 1.9およびSpringBoot 1.5.xでこの問題が発生しました。

Java 1.8では、明示的なプロパティなしでメインクラスを見つけることができ、 'mvn package'は問題なく動作します。

0
dy10