2014-04-22 5 views
129
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 

Mein Projekt hat mehr als eine Klasse mit einer main Methode. Wie kann ich dem Spring Boot Maven Plugin mitteilen, welche der Klassen es als Hauptklasse verwenden soll?Wie kann ich Spring Boot mitteilen, welche Hauptklasse für das ausführbare jar verwendet werden soll?

+1

java -cp myjar.jar MyClass –

+3

@Evgeni: Das ist ein Laufzeit-Flag. So weit kommt es nicht. Es baut nicht. – Thilo

Antwort

204

Ihre Startklasse in Ihrem pom hinzufügen:

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

Keine Notwendigkeit, irgendetwas zu deaktivieren. Oder fehlt mir etwas? –

+22

Beachten Sie, dass diese Antwort korrekt ist, wenn Sie den Spring-Start-Starter-Eltern Pom verwenden. In diesem Fall wird die Eigenschaft "start-class" auf den Konfigurationsparameter "mainClass" des Spring-Boot-Maven-Plugins angewendet (was Sie direkt tun können, wenn Sie den Starter nicht verwenden). –

+11

Danke @ludo_rj, und ich fand, dass dies auch funktioniert: 'mvn sauberes Paket -Dstart-class = com.foo.Application', wenn ich dynamisch angeben möchte mit welcher Hauptklasse – zhuguowei

58

Wenn Sie die Feder-boot-Starter-parent pom verwenden dies nicht tun, dann aus dem Spring documentation:

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

I gradle Wrapper verwendet gradlew statt gradle und arbeitete für mich.

107

Für diejenigen Gradle mit (anstelle von Maven):

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

Wenn Sie mit Feder-boot-Starter-Eltern in Ihrem pom, fügen Sie einfach folgendes Ihr pom:

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

Dann machen Sie Ihr MVN-Paket.

Siehe this Spring docs page.

Ein sehr wichtiger Aspekt ist hier zu erwähnen, dass die Verzeichnisstruktur src/main/java/nameofyourpackage

+0

Ich fand diese Lösung zu arbeiten, ohne die pom.xml zu ändern nachdem ich die Paketanforderungen für die .java-Klassen repliziert habe. –

1

ich mein Projekt hatte umbenannt werden muss, und es wurde noch die alte Application Klasse auf dem Build-Pfad zu finden. Ich habe es im Ordner 'build' entfernt und alles war in Ordnung.

+1

Danke! Ich hatte das gleiche Problem. Das funktionierte für mich –

2

ich den folgenden Code in pom.xml ausprobiert und es funktionierte für mich

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

+0

Ich habe versucht, die Spring-Boot-Maven-Plugin-Konfiguration zu verwenden, die Sie in meinem Multimodul-Maven-Projekt erwähnt haben, das aus mehreren Spring-Boot-Projekten bestand und Spring Boot als BOM-Abhängigkeit enthielt, und es funktionierte wie ein Zauber. Bezüglich des Maven-Compiler-Plugins habe ich nichts angegeben, da ich meine POM-Plattform nicht abhängig machen möchte. Maven hat sich automatisch gegabelt, also denke ich, dass du diese Konfiguration einfach ignorieren kannst. – Cheloute

1

Seit dem Frühjahr Boot-1.5 können Sie die fehleranfällige Stringliteral in pom oder build.gradle vervollständigen ignorieren . Das Repackaging Tool (via Maven oder Gradle Plugin) wird das mit @SpringBootApplication kommentierte für Sie auswählen. (Siehe diese Ausgabe für Details: https://github.com/spring-projects/spring-boot/issues/6496)

Verwandte Themen