2014-04-22 10 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 

Il mio progetto ha più di una classe con un metodo main. Come posso dire al plug-in Maven di Spring Boot quale delle classi dovrebbe usare come classe principale?Come posso indicare a Spring Boot quale classe principale utilizzare per il jar eseguibile?

+1

java -cp myjar.jar MyClass –

+3

@Evgeni: è un flag di runtime. Non arriva così lontano. Non riesce a costruire. – Thilo

risposta

204

Aggiungi la tua classe di partenza nel vostro pom:

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

Non è necessario disabilitare nulla. O mi sta sfuggendo qualcosa? –

+22

Si noti che questa risposta è corretta se si utilizza il pom spring-boot-starter-parent. In tal caso, la proprietà "start-class" viene applicata al parametro di configurazione "mainClass" del plug-in spring-boot-maven (che puoi eseguire direttamente se non stai utilizzando lo starter). –

+11

Grazie a @ludo_rj, e ho trovato che funziona anche: 'pacchetto mvn clean -Dstart-class = com.foo.Application', se vuoi specificare dinamicamente usando quale classe principale – zhuguowei

58

Se NON utilizzare il pom primavera-boot-starter-genitore, poi dal 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

ho usato involucro Gradle gradlew invece gradle e ha funzionato per me.

107

Per coloro che utilizzano Gradle (invece di Maven):

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

Se si sta utilizzando la primavera-boot-starter-genitore in vostro pom, è sufficiente aggiungere il seguente al vostro pom:

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

Quindi fai il tuo pacchetto mvn.

Vedere this Spring docs page.

Un aspetto molto importante è quello di ricordare che la struttura di directory deve essere src/main/java/nameofyourpackage

+0

ho trovato questa soluzione funzionante senza modificare pom.xml una volta ho replicato i requisiti del pacchetto per le classi .java. –

1

avevo rinominato il mio progetto ed era ancora trovare il vecchio Application classe sul percorso di generazione. L'ho rimosso nella cartella 'build' e tutto andava bene.

+1

Grazie! Ho avuto lo stesso problema. Questo ha funzionato per me –

2

ho provato il seguente codice nel pom.xml e ha funzionato per me

<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

Ho provato ad utilizzare la configurazione del plug-in maven di primavera che hai menzionato nel mio progetto multimodule maven, composto da diversi progetti di avvio Spring e incluso Spring Boot come dipendenza da BOM, e ha funzionato come un fascino. Per quanto riguarda il plugin maven-compiler, non ho specificato nulla perché non voglio che la mia piattaforma POM dipenda. Maven si biforca automaticamente, quindi penso che puoi semplicemente ignorare questa configurazione. – Cheloute

1

Dalla primavera Boot 1.5, è possibile completare ignorare la stringa soggetto a errori letterale pom o build.gradle . Lo strumento di repackaging (tramite plugin maven o gradle) sceglierà quello annotato con @SpringBootApplication per te. (Fare riferimento a questo problema per maggiori dettagli: https://github.com/spring-projects/spring-boot/issues/6496)