创建一个Maven“target”目录的zip归档文件。

37
我希望创建一个我的“目标”目录($ {project.build.directory})的zip存档。 对于这样一个简单的任务,使用maven-assembly-plugin对我来说似乎有些过度(而且有点复杂 - 为什么必须使用另一个文件,即汇编描述符,来执行此任务)。 我无法在http://repo1.maven.org/maven2存储库中找到看似更简单的maven-zip-plugin。 有任何意见吗?

jeejava.com/zip-file-using-maven-assembly-plugin/ - user3470953
2个回答

62
如果预定义的 bin 组装描述符不满足您的需求,则有三个选择:
  1. 使用 maven-assembly-plugin - maven-zip-plugin 从未发布过,因为 assembly 插件可以完成 zip 插件所做的一切,甚至更多功能,请参见 MNG-2243
  2. 使用 maven-antrun-plugin(可能需要 build-helper-plugin 附加 zip) - 这里有一个示例 here(最终看起来比组装插件更冗长)。
  3. 编写自己的插件 - 当您拥有 assembly 插件时,为什么要这样做呢?

就我个人而言,我会使用带有以下 zip.xml 描述符的 maven-assembly-plugin:

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

无效 - 使用了内置的“bin”。我无法弄清如何指向自定义的非内置对象。 - Ondra Žižka
使用antrun插件的一个优点是,它在zip文件中以不同的方式存储文件大小,而不是使用assembly插件。如果您使用“ZipInputStream”读取zip并使用“getSize()”,则会获得由antrun创建的zip条目大小,对于使用assembly创建的zip,则返回-1。 - Nick Wilson

15
如果您对生成的.zip文件没有任何“特殊”需求,可以使用预定义的Maven Assembly描述符之一。预定义的装配描述符使得快速轻松地创建特定的组件成为可能,而无需提供自己的装配描述符。假设您想要使用bin预定义描述符。那么在POM的build部分的plugins部分中,您只需要添加以下内容即可。
<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>2.6</version>
  <configuration>
    <descriptorRefs>
      <descriptorRef>bin</descriptorRef>
    </descriptorRefs>
  </configuration>
</plugin>

当然,和Maven一样,如果你想超越默认配置,你需要创建自己的配置文件,对于这种情况,这意味着你需要创建自己的程序集描述符。
预定义描述符的列表可以在这里找到。

不错的选择。然而,在我的过程结束时,目标目录只包含一个exe文件和一个带有其他exe文件的目录 - 所有安装程序。我只想将它们全部一起压缩。 - Yaneeve
所以你的问题是默认描述符会打包比你需要的更多内容,例如工作文件夹的内容等?是否有一个特定的目标文件夹需要被打包(例如${project.build.directory}/installers),但你希望其他文件夹被省略?还是你有其他目标? - RTBarnard
我已经从${project.build.directory}目录中删除了所有不需要的文件和目录,只希望完全压缩它的内容。如果你没有比Pascal更好的建议,我想我只能按照他展示的方式创建那个“冗余”的汇编文件并选择他的解决方案了... - Yaneeve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接