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]
メインクラスが複数ある場合は、各プロファイルで明示的に メインクラスを構成 する必要があります。
<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 を参照してください
または単にプラグイン構成でメインクラスをハードコーディングします。
<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>
Mvn cleanを実行せずにmvn installを実行すると、このエラーが発生することがあります。
[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つのメインメソッドのみが許可されます。
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>
同じエラーが発生しました。 mainを含むApplicationクラスの名前をfoo.Javaからbar.Javaに変更し、クリーンアップして更新しました。ですから、メインは1つしかありませんでした。
ターゲットフォルダーの下の古い生成クラスfoo.classを削除すると、エラーはなくなりました。
public static void main(String[] args)
を持つクラスが複数ある場合は、アプリケーションを確認してください。不要なものを削除してください。特に、https://start.spring.io/
を使用してプロジェクトを生成する場合、mainメソッドを含むクラスが付属します。
Mainメソッドを持つすべてのクラスが必要な場合は、pomで言及することで、アプリケーションの起動時にどれを追加するかを明示的に指定するだけです。