2010-11-01 51 views
2

嗨,我創建了一個程序集壓縮項目的圖像,我把它掛在我的pom文件的包裝階段,這裏的問題是當我執行「clean compile package」時, zip文件以及我不想創建的文件-jar-with-dependencies.jar。我怎麼可以禁止生成這個jar文件大會總是執行與依賴關係的罐子

這裏是我的POM

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <inherited>false</inherited> 
    <configuration> 
     <descriptors> 
      <descriptor> 
       src/main/assembly/cat_image_resources_assembly.xml 
      </descriptor> 
     </descriptors> 
    </configuration> 
    <executions> 
     <execution> 
     <id>cat_image_resources</id> 
     <phase>package</phase> 
     <goals> 
      <goal>single</goal> 
     </goals> 
     <configuration> 
      <!-- appendAssemblyId>false</appendAssemblyId> 
      <Change the name to standard name > 
      <finalName>renameImages</finalName--> 
     </configuration> 
     </execution> 
    </executions> 
</plugin> 

彙編文件cat_image_resources_assembly.xml

<assembly> 
<id>cat_image_resources</id> 
<formats> 
    <format>zip</format> 
</formats> 
<includeBaseDirectory>false</includeBaseDirectory> 
<baseDirectory>${artifactId}</baseDirectory> 
<fileSets> 
    <fileSet> 
     <directory>exportedImages</directory> 
     <outputDirectory/> 
     <fileMode>644</fileMode> 
    </fileSet> 
</fileSets> 
</assembly> 

它生成以下文件

CATImageExport2-1.0,SNAPSHOT- cat_image_resources.zip(需要5MB), CATImageExport2-1.0-SNAPSHOT-jar -with-dependencies.jar(58mb這是用dep我想排除生成的依賴)

回答

0

您確定它是創建依賴關係jar文件的程序集插件嗎?

我說,因爲它看起來像組裝插件完全按照您指定的方式進行。但是,如果沒有看到更多項目的pom.xml文件,我不能排除項目的pom.xml文件中沒有另外的插件,或者甚至是可能爲您創建依賴項jar文件的父pom.xml文件。

+0

如果我註釋掉程序集插件maven-assembly-plugin,那麼它不會生成任何這兩個工件。 – sanat 2010-11-02 04:48:42

+0

帕斯卡有正確的步驟來嘗試下一步。看看有效的絨球。你可能會繼承你不想要的東西。 – jgifford25 2010-11-02 16:10:50

1

這裏的問題是當我執行「clean compile package」時,它正在創建我需要的zip文件以及我不想創建的文件-jar-with-dependencies.jar。

-jar-with-dependencies.jar文件,如果使用的jar-with-dependencies預先定義的描述通常是創建。您提供的不顯示這樣的事情和工作正常的代碼片段(後在測試POM粘貼):

 
$ ls target 
archive-tmp  Q4068706-1.0-SNAPSHOT-cat_image_resources.zip test-classes 
classes   Q4068706-1.0-SNAPSHOT.jar 
maven-archiver surefire-reports 

仔細檢查你不從父POM繼承插件配置(例如與mvn help:effective-pom),因爲您提供的XML代碼段按預期工作。

+0

嗨感謝您的答覆,我沒有幫助:effictive-POM,發現罐子,有依賴性具有預先定義的描述, – sanat 2010-11-03 04:59:07

+0

Maven的組裝插件 2。2-β-3 <結構> 罐與 - 依賴 $ {主級} sanat 2010-11-03 04:59:57

+0

@sanat:那麼你有你的答案:) – 2010-11-03 05:02:15

0

回覆:「有沒有一種方法可以重寫父poms定義?我的意思是可以忽略父pom定義並擁有自己的描述符,以便jar-with-dependencies不應該干擾我的pom。」

我在過去曾經摸索過這一點,並且永遠無法讓maven做我想做的事。我敢肯定,簡短的答案是「不」,但我會詳細說明我嘗試過的。

  1. 我爲兩個執行程序創建了pluginManagement入口,每個執行都有唯一的ID和配置。然後在插件部分的程序集插件中,我添加了一個只有一個執行的執行部分,其中一個id與我真正想運行的執行的id相匹配。它仍然運行。

  2. 我爲程序集插件創建了一個插件管理條目,並執行一次具有唯一標識和配置的條目。然後,在插件部分,我爲一個執行程序和一個不同的ID和配置爲程序集插件創建了一個條目。它仍然運行。

  3. 我爲程序集插件創建了一個插件管理條目,並執行一次具有唯一標識和配置的條目。然後在插件部分中,我創建了一個帶有一個執行和相同ID的程序集插件,這次指定了完全不同的配置。它顯然將兩種配置合併在一起併產生了兩種配置的結果。注意:pluginManagement部分中的配置使用了描述符條目,而plugins部分中的配置使用了descriptorRef條目。我嘗試在插件部分的配置中添加一個空的描述符條目,希望它能覆蓋(並基本上消除)pluginManagement部分中指定的描述符的使用,但沒有這樣的運氣。

我相信Maven將始終與合併子插件父插件,基本上沒有覆蓋,貪婪地合併匹配標籤(越高越好的理念,所以它不會選擇一個標籤的子元素上的另一個子元素)。

就哲學而言,程序集插件可以幫助您構建自定義工件(並且在maven中,每個項目應產生一個主要工件,不包括源分類器等),因此如果多個子項需要使用匯編插件,你只會把它們在父pom中所有的共同點。如果你沒有任何maven-assembly-plugin配置/執行通用的東西,我認爲你需要將assembly插件配置移動到每個子項目。

0

關於Maven正在做的所有配置繼承,凱文的答案並沒有太多補充。不過,如果你可以更改父POM(不影響它的行爲)一個選項是:

  1. 在父,定義<descriptorRefs>元素鏈接到JAR-與依賴性的<配置>元素爲'默認'<執行>。即而不是作爲該插件的<配置>的一部分。
  2. 在孩子,跳過「默認」 <執行>(這將因此disble罐子與 - 依賴)和其<配置>添加自己的<執行>。

這樣的例子可以在這裏找到:

https://github.com/demobox/jar-with-deps-vs-spi/blob/master/pom.xml

有,默認是在「與業務處理程序的個人資料,而不是一個孩子POM覆蓋,但機制應是相同的。