2017-06-14 7 views
0

Grundsätzlich in einem Multi-Modul-Projekt Frühjahr Boot-Anwendung verpacken, ich habe ein Multi-Modul-Projekt haben, wie folgt:Kann nicht richtig

parent-project 
├── core-app 
└── web-app 

core-app und web-app beide Frühlings-Boot-Projekte sind, und ihre Eltern ist parent-project statt spring-boot-starter-parent. Also gerade deswegen, haben sie beide:

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

in ihren pom.xml sowie:

<plugin> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-maven-plugin</artifactId> 
    <version>${spring.boot.version}</version> 
    <configuration> 
     <executable>true</executable> 
    </configuration> 
</plugin> 

Dieses Setup perfekt läuft in IntelliJ, doch, wenn ich die Anwendung package, erhalte ich eine sehr klein .jar und im Grunde, wenn ich es ausführbar ausführen, bekomme ich mehrere command not found Fehler. Wenn ich es mit java -cp my.jar com.Main starte, bekomme ich SpringApplication not found. Von daher verstehe ich, dass die core-app und web-app nicht alle Abhängigkeiten innerhalb der Jar hat.

Wenn ich es in ein Standalone .jar mit spring-boot-starter-parent als Eltern bauen; Es klappt.

Was mache ich falsch? Vielen Dank.

Update:

Nun, das war, was passiert, wenn ich mvn package. Allerdings, wenn ich mvn spring-boot:repackage tatsächlich ausführen ich erhalte:

Execution default-cli of goal org.springframework.boot:spring-boot-maven-plugin:1.5.2.RELEASE:repackage failed: Source must refer to an existing file 

Wie hier vorgeschlagen this scheint das Problem zu lösen, aber ich bezweifle, dass es nicht der normale Weg sein könnte. Zum Beispiel:

mvn clean package spring-boot:repackage macht den Trick, aber ich kann nicht mvn clean && mvn package && mvn spring-boot:repackage. Ich würde mich über eine Erklärung dafür freuen. Vielen Dank!

+0

Nur ein Gedanke - Was ist die Notwendigkeit, Multi-Modul-Projekt zu haben, wenn Sie bereits Ihr Produkt als Microservice versenden? –

+0

Ich muss Domänenobjekte/POJOs in ein Modul aufteilen, damit sie von nicht-technischen Personen in einer völlig anderen Anwendung verwendet werden können. –

+1

Sie sollten mit 'java -jar my.jar' anstelle von' java -cp my.jar com.Main' laufen. –

Antwort

1

Maven-Projekte können nur einen Elternteil haben, und Ihre "Module" können keine Module sein, es sei denn, parent-project ist der Elternteil. Sie können theoretisch die Boot-Eltern erweitern, aber das kann in Eile kompliziert werden.

Stattdessen gehen Sie einfach weiter und verwenden Sie die Boot-Abhängigkeiten und Einschlüsse selektiv. Verwenden Sie die dependencyManagement und BOM Import in parent-project, ziehen nur in den Abhängigkeiten tatsächlich für jedes Modul benötigt wird (wahrscheinlich einschließlich spring-boot-starter-web für Ihr Fett jar), und fügen Sie das Maven Plugin für Standalone-weit-jar Module nur:

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

Dann erhalten Sie Standardgrößen (normalerweise ein paar K) Abhängigkeitsgläser und die gesamte Behandlung speziell dort, wo es erforderlich ist.

+0

Das ist eigentlich genau das, was ich tue (Ich habe versucht, mit Boot-Abhängigkeiten sowohl in 'dependencyManagement' Eltern Pom und Kind-Module 'Pom) und immer noch den Fehler zu bekommen. –

+0

@HasanCanSaral Ihr Snippet enthält nicht das Ziel "Repackage", das den Teil bildet, der am Ende das Fettglas erzeugt. – chrylis

+0

Es tut es tatsächlich, es wurde irgendwie nicht gepostet. Aber ich bin mir sicher, dass das Repackage-Ziel nicht aufgerufen wird, obwohl das "Ziel" da ist, siehe oben Update. Schätze deine Hilfe, danke! –

Verwandte Themen