2016-04-26 14 views
0

Grundsätzlich möchte ich eine JAR-Datei mit dem Namen <project.name>.jar zusätzlich zu Standard-JAR-Datei (was in meinem Fall ist so etwas wie <project.name> + <project.version>.jar) generieren. HINWEIS: Dies ist <project.name>.jar alle gleich zu Standard-jar, aber der Name.Wie erzeuge ich ein zusätzliches jar, das eine korrekte und vollständige Manifest-Datei für die Bamboo-Bereitstellung enthält?

Und diese zusätzliche jar eine Manifest-Datei wie unter dem die Manifest-Datei des Standard erzeugen

anifest-Version: 1.0 
Archiver-Version: Plexus Archiver 
Built-By: XXX 
Start-Class: com.XXXX.XXX.Application 
Spring-Boot-Version: 1.3.1.RELEASE 
Created-By: Apache Maven 
Build-Jdk: 1.8.0_74 
Main-Class: org.springframework.boot.loader.JarLauncher 

Ich bin das Hinzufügen zusätzlichen Blockes in meinem Glas meines

Aber wie folgt haben sollte In diesem Fall enthält die Manifestdatei, die in meinem Additions-Jar generiert wurde, keine folgenden Felder:

Start-Class 
Main-Class 
... 

So konnte es nicht bereitgestellt werden. Ich weiß, die Anforderung klingt seltsam, aber die Frage ist klar, wie Maven ein Glas zu erzeugen, die eine korrekte und vollständige Manifest-Datei für die Bereitstellung haben?

// Der komplette Plugin Teil

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <executions> 
       <execution> 
        <goals><goal>test-jar</goal></goals> 
       </execution> 
       <execution> 
        <id>copy-jar</id> 
        <phase>package</phase> 
        <goals><goal>jar</goal></goals> 
        <configuration> 
         <finalName>${project.artifactId}</finalName> 
        </configuration> 
       </execution> 
       <execution> 
        <id>dto-jar</id> 
        <goals><goal>jar</goal></goals> 
        <phase>package</phase> 
        <configuration> 
         <finalName>${project.artifactId}-dto</finalName> 
         <includes> 
          <include>**/dto/*</include> 
          <include>**/dto</include> 
          <include>**/exceptions/*</include> 
          <include>**/exceptions</include> 
          <include>**/utils/*</include> 
          <include>**/utils</include> 
         </includes> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
+1

die Manifest-Einträge oben, wo in der anderen Ausführung Abschnitt konfiguriert, richtig? Es gibt keinen Plugin-Konfigurationsabschnitt außerhalb des Ausführungsabschnitts? Um es klarer zu sagen: Kannst du den gesamten jar-Plugin-Bereich teilen? –

+0

@ A.DiMatteo Hey, ich habe das ganze Jar-Plugin hinzugefügt. Ich nehme an, dass ich Standard-Manifest-Einstellung verwende. – Acton

Antwort

0

Bezüglich Ihrer maven-jar-plugin Abschnitt:

  • Sie sind mit drei Ausführungen: eine für das test-jar Ziel, zwei für die jar Ziel
  • eines Sie verwenden die Standardausführungs-ID (default-jar) erneut, um den Eintrag finalName anzugeben, geben jedoch keine Manifestkonfiguration an. Gemäß dieser Konfiguration sollte Ihre Manifest-Datei auch leer sein und dann nicht mit der Beschreibung übereinstimmen, die Ihre Frage dann enthält.
  • Die zusätzliche jar Zielausführung hat eine weitere Konfiguration mit customizated Option, hier ist nichts falsch, außer dass Sie eine ordnungsgemäß gefüllte Manifest-Datei als Teil davon haben, während (wieder) es keine Konfiguration dafür gibt.

wäre eine mögliche Erklärung sein, dass Ihr pom stellt auch einen pluginManagement Abschnitt mit weiterer Konfiguration für die maven-jar-plugin oder einen parent pom an seiner Spitze, die dann eine weitere Konfiguration für das gleiche angeben würden.

Um dies zu verdoppeln überprüfen Sie

mvn help:effective-pom -Doutput=eff-pom.xml 

und prüfen Sie den Inhalt der erzeugten eff-pom.xml Datei ausführen konnte. Das wäre die einzige Quelle der Wahrheit für Ihren Fall.


Mit Blick auf Ihrem Manifest Eintrag:

Spring-Boot-Version: 1.3.1.RELEASE 
Main-Class: org.springframework.boot.loader.JarLauncher 

Es ist ganz klar macht, dass Sie auf einem Frühlings-Boot Projekt arbeiten, in der Regel eine Feder Boot-Mutter pom, die bereits konfiguriert die erforderliche ManifestdateiEs verwendet jedoch eine Fat-Jar (Glas mit Abhängigkeiten oder uber jar), nicht über die maven-jar-plugin, sondern über die maven-assembly-plugin gebaut.

Als example:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.4</version> 
    <configuration> 
     <descriptors> 
      <descriptor>src/main/assembly/jar-with-dependencies.xml</descriptor> 
     </descriptors> 
     <archive> 
      <manifest> 
       <mainClass>org.springframework.boot.loader.JarLauncher</mainClass> 
      </manifest> 
      <manifestEntries> 
       <Start-Class>org.springframework.boot.load.it.jar.EmbeddedJarStarter</Start-Class> 
      </manifestEntries> 
     </archive> 
    </configuration> 
    <executions> 
     <execution> 
      <id>jar-with-dependencies</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Daher sollten Sie bei der Jar Plugin Lösung sehen nicht, sondern ein weiteres Assembly Plugin Ausführung für den gleichen hinzuzufügen.

+0

@ Acton haben Sie dieses Problem gelöst? –

+0

Ich gebe den ursprünglichen Plan auf, anstatt zwei Gläser (zwei Namen) für das Hauptglas zu haben, ich behalte nur das Standardglas, so dass es standardmäßig eine korrekte Manifestdatei hat. Aber deine Vorschläge sind immer noch gut zu lesen. Danke – Acton

0

Nur ein kurzer Teil von einigen anderen Aspekten dieses Problems. eigentlich sollte pom file niemals für das Deployment-Geschäft verantwortlich sein (obwohl es könnte, aber sehr wahrscheinlich in Zukunft zu weiteren Problemen führen). Dieser Teil sollte vollständig vom Bamboo Deploy-Skript verwaltet werden. Das habe ich schließlich getan.