2010-03-25 35 views

回答

47

如果bin預定義裝配描述符不符合你的需求,那麼你有三種選擇:

  1. 使用Maven的組裝插件 - Maven的拉鍊 - 插件再也沒有出來,因爲Assembly插件可以做zip插件所做的一切,更多,請參閱MNG-2243
  2. 使用maven-antrun-plugin(也可能是build-helper-plugin附加zip) - 有一個示例here(這看起來比最後的程序集插件更加冗長)。
  3. 編寫自己的插件 - 爲什麼當你有程序集插件時要這麼做。

就個人而言,我只想使用maven具組件插件具有以下zip.xml描述:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> 
    <id>bin</id> 
    <baseDirectory>/</baseDirectory> 
    <formats> 
    <format>zip</format> 
    </formats> 
    <fileSets> 
    <fileSet> 
     <directory>${project.build.directory}</directory> 
    </fileSet> 
    </fileSets> 
</assembly> 

而在你的POM:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.6</version> 
    <configuration> 
    <descriptors> 
     <descriptor>src/main/assembly/zip.xml</descriptor> 
    </descriptors> 
    </configuration> 
    <executions> 
    <execution> 
     <id>make-assembly</id> <!-- this is used for inheritance merges --> 
     <phase>package</phase> <!-- append to the packaging phase. --> 
     <goals> 
     <goal>single</goal> <!-- goals == mojos --> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 
+0

不起作用 - 內置的「bin」是用過的。而我無法弄清楚如何指向非內置的自定義。 – 2013-07-10 21:29:22

+0

在裝配插件上使用antrun插件有一個優勢,因爲它在zip內部以不同方式存儲文件大小。如果您使用'ZipInputStream'閱讀壓縮文件並使用'getSize()',那麼您將獲得由antrun創建的zip大小的條目大小,對於使用assembly創建的zip文件,它會返回-1。 – 2016-09-16 13:55:36

11

如果您對生成的.zip文件沒有任何「特殊」需求,可以使用其中一個預定義的Maven Assembly描述符。預定義的組裝描述符可以輕鬆快捷地創建特定的組件,而無需提供您自己的組裝描述符。假設您想使用bin預定義的描述符。然後在POM的部分的plugins部分中,您可以添加以下內容。

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.6</version> 
    <configuration> 
    <descriptorRefs> 
     <descriptorRef>bin</descriptorRef> 
    </descriptorRefs> 
    </configuration> 
</plugin> 

當然,一如既往與Maven,如果你想要做一些超出默認配置,你必須創建自己的配置,在這種情況下,這意味着你自己的裝配描述符。

預先定義的描述符列表記錄在here

+0

不壞的選擇。然而,在我的過程結束時,目標目錄只包含一個exe文件和一個包含其他exe文件的目錄 - al linstallers。我只是想將它們壓縮在一起 – Yaneeve 2010-03-25 10:07:49

+0

因此,您的麻煩是默認描述符將打包超過您的需要,比如工作文件夾的內容等。是否存在要打包的目標下的特定文件夾(例如'$ {project.build.directory}/installers'),但您希望省略其他目錄?或者你有其他的目標嗎? – RTBarnard 2010-03-25 10:12:54

+0

我已經從$ {project.build.directory}目錄中刪除了所有不需要的文件和目錄,只是希望完全壓縮其內容。如果你沒有比Pascal更好的建議,我想我只需要創建「冗餘」彙編文件,並選擇他的解決方案... – Yaneeve 2010-03-25 11:55:15