我该如何告诉Spring Boot可执行jar使用哪个主类?

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插件应该使用哪个类作为主类?

在你的pom中添加你的开始类:

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

对于那些使用Gradle(而不是Maven)的人:

 springBoot { mainClass = "com.example.Main" } 

如果你不使用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> 

如果你在你的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

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

我已经重命名了我的项目,它仍然在构buildpath上find旧的Application类。 我把它移到“build”文件夹中,一切都很好。

自Spring Boot 1.5以来,您可以完成忽略pom或build.gradle中容易出错的string字面值。 重新包装工具(通过Maven或Gradle插件)将为您select一个用@SpringBootApplication注解的@SpringBootApplication 。 (有关详细信息,请参阅此问题: https : //github.com/spring-projects/spring-boot/issues/6496 )

我用gradle包装gradlew代替gradle并为我工作。