2016-08-11 5 views
1

Ich baue eine ausführbare Jar über das Spring-Boot Maven-Plugin. Ich muss eines der abhängigen Jar entpacken, damit XML-Dateien zur Laufzeit richtig gelesen werden können. Ich folgte der Dokumentation bezüglich des Entpackens von Bibliotheken. Mein Plugin Config ist wie folgt:Spring Boot requiresUnpack lädt nicht zur Laufzeit

 <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <goals> 
         <goal>repackage</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <requiresUnpack> 
        <dependency> 
         <groupId>com.deep6analytics.pipeline</groupId> 
         <artifactId>pipeline-services-ctakes</artifactId> 
        </dependency> 
       </requiresUnpack> 
      </configuration> 
     </plugin> 
    </plugins> 

ich den Inhalt des Glases überprüft und bestätigt, dass die Packungsinformation im Glas codiert wurde:

$ zipnote target/pipeline-apps-annotation-server-1.0-SNAPSHOT.jar | grep -C 1 UNPACK 
@ BOOT-INF/lib/pipeline-services-ctakes-1.0-SNAPSHOT.jar 
UNPACK:1e6eda0ca9f1b740c4aba6058cac74a5084f1706 
@ (comment above this line) 

Gemäß der Dokumentation, zur Laufzeit, erwartete ich um zu sehen, ein "spring-boot-libs" Verzeichnis in meinem $ TMPDIR:

Geben Sie jede Bibliothek als < Abhängigkeit > mit einem <groupId> und eine <artifactId> und sie werden zur Laufzeit in $ TMPDIR/spring-boot-libs entpackt.

Wenn ich jedoch die Anwendung ausführen, überprüfe ich die $ TMPDIR und sehe das entpackte Verzeichnis nicht. Als Folge versagt meine Anwendung zu starten:

ls -la $TMPDIR 

drwxr-xr-x 3 staff  102 Aug 10 23:40 pipeline-apps-annotation-server-1.0-SNAPSHOT.jar-spring-boot-libs-96fe7360-b23b-4caa-a2ce-75aa0300a417 
drwxr-xr-x 3 staff  102 Aug 10 23:27 pipeline-apps-annotation-server-1.0-SNAPSHOT.jar-spring-boot-libs-a06a2373-0694-42e9-bee1-29191b3b764a 
drwxr-xr-x 4 staff  136 Aug 10 20:54 sp_update 
drwx------ 2 staff  68 Aug 10 11:30 ssh-azEJDYkZH6ho 
drwxr-xr-x 3 staff  102 Aug 10 15:05 tomcat.104726406473930572.8085 
drwxr-xr-x 3 staff  102 Aug 10 23:38 tomcat.1527552147767629466.8080 
drwxr-xr-x 3 staff  102 Aug 10 23:13 tomcat.1546871599966723864.8080 

Sieht jemand, was ich falsch mache, oder bin ich Missverständnis etwas?

Antwort

2

Die Dokumentation ist ein wenig irreführend. Die entpackten Verzeichnisse gibt es:

drwxr-xr-x 3 staff  102 Aug 10 23:40 pipeline-apps-annotation-server-1.0-SNAPSHOT.jar-spring-boot-libs-96fe7360-b23b-4caa-a2ce-75aa0300a417 
drwxr-xr-x 3 staff  102 Aug 10 23:27 pipeline-apps-annotation-server-1.0-SNAPSHOT.jar-spring-boot-libs-a06a2373-0694-42e9-bee1-29191b3b764a 

Diese Verzeichnisse die Gläser Dateien enthalten sollte, die Sie markiert haben, als um von Ihrem ausführbare jar entpackt werden.

Ich habe an issue geöffnet, um die Dokumentation zu korrigieren.

+1

Ok - Ich dachte auch, dass das Glas würde "explodiert", so dass jede der Ressourcen innerhalb der Jar wie eine Datei auf der Festplatte residieren würde. Eine gewisse Klarheit darüber, was "Entpacken" eigentlich bedeutet, wäre hilfreich. Als eine Folge auf - wie extrahiere ich die Ressourcen innerhalb der Jar in das Dateisystem, so dass sie direkt lesen können? –

+1

Ich bin nicht sicher, warum Sie es tun möchten, aber Sie können auf eine Ressource über ClassLoader.getResourceAsStream() zugreifen und dann in eine Datei schreiben. Sie können dies ohne den Zwischen-Entpackungsschritt tun, obwohl –

+1

Leider verwende ich eine Infrastruktur, die durch verschachtelte XML-Dokumente recurses - es geht davon aus, dass alle enthaltenen Dokumente im Dateisystem befinden. Also kann ich nichts tun, um diese Tatsache zu ändern. Kurz gesagt, ich brauche diese Dateien aus dem Glas gezogen und auf dem Dateisystem platziert. –

Verwandte Themen