2013-04-13 22 views
14

Dopo aver creato un progetto mvn di esempio, ho aggiunto il mio codice Java & alle dipendenze &.Maven - Can not Execute JAR

Quindi, ho creato correttamente il mio JAR tramite mvn install. Infine, ho riscontrato un errore durante il tentativo di eseguire il JAR.

vagrant$ java -jar target/my-app-1.0-SNAPSHOT.jar 
Failed to load Main-Class manifest attribute from 
target/my-app-1.0-SNAPSHOT.jar 
+0

E 'al di sopra - 'Impossibile caricare attributo manifest Main-Class da target/my-app-1.0-SNAPSHOT.jar' –

+1

invece di eseguire "java -jar", puoi posizionare il tuo jar in classpath e provare a eseguire qualcosa come "java MainClass" – Lokesh

risposta

35

è necessario impostare la classe principale nel manifesto utilizzando il maven-jar-plugin

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <configuration> 
      <archive> 
       <manifest> 
        <mainClass>com.someclass.Main</mainClass> 
       </manifest> 
      </archive> 
     </configuration> 
    </plugin> 

Tratto da here.

EDIT

Se si desidera comprimere il vaso risultante con le dipendenze è possibile utilizzare questo

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
    <archive> 
     <manifest> 
     <mainClass>fully.qualified.MainClass</mainClass> 
     </manifest> 
    </archive> 
    <descriptorRefs> 
     <descriptorRef>jar-with-dependencies</descriptorRef> 
    </descriptorRefs> 
    </configuration> 
    <executions> 
    <execution> 
     <id>make-assembly</id> 
     <phase>package</phase> 
     <goals> 
     <goal>single</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

Tratto da here.

+0

Se il mio pacchetto = 'com.mycompany.app' e la mia classe principale è' com.mycompany.app.MailServerApplication', '' = ultimo? –

+0

Sì, il nome classe completo di una classe che ha un 'public static void main (String [] args)'. –

+0

Grazie. Sembra che abbia il mio prossimo problema da risolvere: 'vagrant $ java -jar target/my-app-1.0-SNAPSHOT.jar' Eccezione nel thread" main "java.lang.NoClassDefFoundError: org/restlet/Application –

1

Se non si dispone di manifest nel proprio jar, il richiamo di java -jar non funzionerà.

Utilizzare questo comando se non avete un manifesto:

java -cp foo.jar full.package.name.ClassName 
+0

Hmm: 'vagrant $ java -jar target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.MailServerApplication' Impossibile caricare l'attributo manifest Main-Class da target/my-app- 1.0-SNAPSHOT.jar –

+0

Controlla il tuo MANIFEST.MF nel tuo barattolo – TheEwook

+6

Penso che tu stia pensando a 'java-cp foo.jar full.package.name.ClassName'. Questa risposta non è corretta. -1 –

Problemi correlati