2014-10-02 17 views
9

Ho un progetto multimodulo, costruire con avvio a molla 1.1.7Primavera Boot MVC tra più moduli executeable vaso

La struttura è

+ parent 
    + import 
     + web 
     + backend 

mio modulo Parent comprenderà tipo di microservices, quello che voglio gestire dal mio genitore (dipendenze che cosa tutti usano) e così via. In import/backend c'è la mia logica di business batch, nel web c'è un'applicazione mvc, da cui posso iniziare il lavoro batch.

In Eclipse tutto funziona correttamente, posso avviare l'applicazione dal file Application.java e l'applicazione funziona.

Ora volevo eseguire quell'applicazione eseguendo il file jar eseguibile, ma ricevo il seguente messaggio di errore quando provo a partire dalla console.

java -jar application.jar 
Kein Hauptmanifestattribut in application.jar 

Il vaso è molto piccolo solo 5kb, non ho trovato alcun vasetti di 3 dipendenze del partito in pacchetto jar.

Il Pom di Web-Module è come segue:

<project> 

     <modelVersion>4.0.0</modelVersion> 

     <parent> 
      <groupId>at.company.bbsng</groupId> 
      <artifactId>bbsng-import</artifactId> 
      <version>0.1.0-SNAPSHOT</version> 
     </parent> 

     <artifactId>bbsng-import-web</artifactId> 
     <name>bbsng-import-web</name> 
     <packaging>jar</packaging> 

     <properties> 
      <start-class>at.company.bbsng.dataimport.Application</start-class> 
     </properties> 


     <dependencies> 

      <!-- APPLICATION --> 
      <dependency> 
       <groupId>at.company.bbsng</groupId> 
       <artifactId>bbsng-import-backend</artifactId> 
       <version>${parent.version}</version> 
      </dependency> 

      <!-- SPRING ... --> 
      <dependency> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-web</artifactId> 
       <exclusions> 
        <exclusion> 
         <artifactId>spring-boot-starter-logging</artifactId> 
         <groupId>org.springframework.boot</groupId> 
        </exclusion> 
       </exclusions> 
      </dependency> 
      <dependency> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-log4j</artifactId> 
      </dependency> 
      <dependency> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-test</artifactId> 
       <scope>test</scope> 
      </dependency> 

      ... 


     </dependencies> 



     <build> 

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

     </build> 

</project> 

Pom del modulo di importazione è:

<project> 

    <parent> 
     <groupId>at.company.bbsng</groupId> 
     <artifactId>bbsng</artifactId> 
     <version>0.1.0-SNAPSHOT</version> 
    </parent> 

    <artifactId>bbsng-import</artifactId> 
    <name>bbsng-import</name> 
    <packaging>pom</packaging> 

    <modules> 
     <module>backend</module> 
     <module>web</module> 
    </modules> 

</project> 

E Pom di Parent è:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>at.company.bbsng</groupId> 
    <artifactId>bbsng</artifactId> 
    <version>0.1.0-SNAPSHOT</version> 
    <packaging>pom</packaging> 
    <name>bbsng</name> 
    <description>BBS Next Generation Application Prototype</description> 

    <properties> 
     <java-version>1.8</java-version> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <org.springframework.boot-version>1.1.7.RELEASE</org.springframework.boot-version> 
    </properties> 

    <modules> 
     <!-- <module>backend</module> --> 
     <!-- <module>business</module> --> 
     <module>import</module> 
     <!-- <module>infra</module> --> 
     <!-- <module>log</module> --> 
     <!-- <module>rest</module> --> 
    </modules> 

    <dependencyManagement> 
     <dependencies> 

      <!-- SPRING-BOOT ... --> 
      <dependency> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-dependencies</artifactId> 
       <type>pom</type> 
       <version>${org.springframework.boot-version}</version> 
       <scope>import</scope> 
      </dependency> 

      <!-- JAVAX ... --> 
      <dependency> 
       <groupId>javax.validation</groupId> 
       <artifactId>validation-api</artifactId> 
       <version>1.1.0.Final</version> 
      </dependency> 

      <!-- COMMONS ... --> 

      ... 

     </dependencies> 
    </dependencyManagement> 

    <build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-release-plugin</artifactId> 
       <version>2.5</version> 
       <configuration> 
        <tagBase> 
         svn://svn.int.company.at/stmlf-repository/prototype/bbsng/tags 
        </tagBase> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>${java-version}</source> 
        <target>${java-version}</target> 
       </configuration> 
      </plugin> 
     </plugins> 

    </build> 

    <profiles> 
     <profile> 
      <id>external</id> 
      <build> 
       <resources> 
        <resource> 
         <directory>src/main/resources</directory> 
         <excludes> 
          <exclude>**/*custom*</exclude> 
          <exclude>**/custom/*</exclude> 
         </excludes> 
        </resource> 
       </resources> 
      </build> 
     </profile> 
    </profiles>  

</project> 

Se avete bisogno ulteriori informazioni si prega di chiedere. Spero che tu possa aiutarmi.

Grazie mille.

+0

Il problema è che la classe dell'applicazione eseguibile deve trovarsi nel progetto principale non in un progetto secondario/importato. Potrebbe funzionare se si definisce esplicitamente la classe principale per il manifest quando viene creato il jar. –

+0

Grazie per la risposta, era corretto, che le proprietà start-class non fossero impostate correttamente, l'ho risolto. Ma non mi ha aiutato con il mio problema. Uno degli strani problemi è che nessuna dipendenza configurata in Maven è nel mio file jar. Mancano tutti, incluso il mio modulo di backend non è nel mio barattolo quello che ho raccolto dal mio modulo web. Il risultato è che il mio barattolo ha una dimensione di 5 KB. –

+0

Qual è il pom per 'bbsng-import-backend'? –

risposta

17

Finalmente ho trovato la soluzione. La parola chiave magia è che riassembla, vedi link http://docs.spring.io/spring-boot/docs/1.1.7.RELEASE/maven-plugin/usage.html

Così ho solo bisogno primavera-boot-maven-plugin nel mio modulo web configurato con repackage obiettivo:

<plugins> 
    <plugin> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-maven-plugin</artifactId> 
     <executions> 
      <execution> 
       <goals> 
        <goal>repackage</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin> 
</plugins> 

Poi tutte le dipendenze sono confezionati in file jar eseguibile e è avviabile dalla console.

Spero che sia di aiuto per le persone che affrontano lo stesso problema.

+0

Puoi spiegare, perché dovrebbe essere in uno dei sottomoduli? Non in tutto o nel genitore? – xenteros

+0

In ogni caso, avevo 4 moduli e 1 genitore e aggiungendo quanto sopra al modulo in cui c'era un metodo principale risolto il problema. – xenteros

+1

L'ho messo nel mio modulo web, perché lì verrà costruito il mio jar eseguibile. Immagino che almeno ce ne sia bisogno là dove ottieni il tuo vaso finale che vuoi eseguire. –