2010-03-25 71 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