2016-04-26 57 views
0

基本上,我想生成一個名爲<project.name>.jar除了默認的jar文件(在我的情況是一樣的東西<project.name> + <project.version>.jar)一個jar文件。注意:此<project.name>.jar是所有默認的jar,但名稱相同。如何生成了具有竹子部署正確和完整的清單文件附加罐子?

而這額外的罐子應該有一個清單文件中像下面這是默認的清單文件生成的JAR

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 

我在我增加額外的塊如下

但在我情況下,在我的加入罐中生成的清單文件不具有以下傳遞字段:

Start-Class 
Main-Class 
... 

因此無法部署。 我知道的要求聽起來不可思議,但問題是清楚的,如何讓Maven生成了具有用於部署的正確和完整的清單文件罐?

//完整的插件部分

 <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

上面的清單條目在其他執行部分內配置,對吧?執行部分之外沒有插件配置部分?更清楚一點:你可以分享整個jar插件部分嗎? –

+0

@ A.DiMatteo嘿,我已經添加了整個jar插件。我想我正在使用默認清單設置。 – Acton

回答

0

關於你maven-jar-plugin部分:

  • 你有三個執行:一個用於test-jar目標,二爲jar目標
  • 之一他們重新使用默認的執行ID(default-jar)指定finalName項,但不指定任何明顯的配置。根據這個配置,你的清單文件也應該是空的,然後與你的問題提供的描述不一致。
  • 附加jar目標執行與customizated選項,沒有什麼錯在這裏進一步的配置,除非你除了要有正確填寫清單文件作爲它的一部分,而(再次)有沒有爲它的配置。

一種可能的解釋是您的POM還提供了一種pluginManagement部,具有用於maven-jar-plugin進一步的配置,或在其頂部具有parent POM然後這將指定相同的另一結構。

要仔細檢查這一點,你可以運行

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

並檢查生成eff-pom.xml文件的內容。這將是你的情況的唯一真相來源。


看你的清單條目:

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

它使相當清楚,你正在處理的春季啓動項目,通常具有已經配置了春天引導父POM所需的清單文件。然而,它使用發缸(具有依賴性的罐子或uber jar),而不是通過maven-jar-plugin而是通過maven-assembly-plugin構建。

作爲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> 

因此,你不應該看一下Jar插件的解決方案,而是添加另外的安裝插件執行的相同。

+0

@Acton你解決了這個問題嗎? –

+0

我有種放棄原來的計劃,而不是有兩個罐子(兩個名字)爲主jar,我只保留默認的一個,所以它默認有一個正確的清單文件。但你的建議仍然很好閱讀。謝謝 – Acton

0

只是快速分享此問題的其他方面。實際上pom文件不應該負責部署業務(即使它可能,但很可能會在將來引發更多問題)。這部分應該由竹部署腳本完全管理。那是我最終做的。