使用Maven修改多个zip文件中的文件

时间:2012-01-25 15:05:16

标签: maven ant-contrib maven-antrun-plugin

今天我想执行这项任务,我遇到了一些问题。所以我在这里介绍我的问题以及我找到的解决方案。也许有人知道一个更简单的解决方案!

问题在于:我正在尝试构建一个使用Maven2构建的Java项目的分发包。在上一步中,生成了几个zip文件,这些文件都包含根目录中名为manifest.xml的文件,我想在所有这些ZIP文件中修改此XML文件。这是一个方案:

package-file-1.zip
|- contents(DIR)
\- manifest.xml

package-file-2.zip
|- contents(DIR)
\- manifest.xml

1 个答案:

答案 0 :(得分:1)

此示例修改${zip.sourcedir}中的zip文件,将所有zip文件的manifest.xml文件中的&替换为&,并将修改后的zip文件放在目录{ {1}}。

为此,它使用target,包括maven-antrun-plugin任务中的forvar任务(http://ant-contrib.sourceforge.net)。这允许将每个zip文件的内容解压缩到单独的目录中。另请注意,使用任务antcontrib从路径中提取zip文件的名称。

basename

为了编写这个解决方案,我从这个URL获得了所需的知识:

  • 使用Ant修改JAR(或ZIP)文件:How do I modify a file in a jar file using ANT?

  • 将多个文件解压缩到不同的目录中:http://grokbase.com/t/ant.apache.org/user/2004/01/re-how-to-unzip-multiple-file-into-separate-directories/122a5ezxhh6eolf5enkrdfgryika

  • 在Maven2中使用ant-contrib:http://docs.codehaus.org/display/MAVENUSER/Antrun+Plugin

    • 但请谨慎使用<build> <plugins> <plugin> <artifactId>maven-antrun-plugin</artifactId> <version>1.7</version> <executions> <execution> <id>copy-and-repair-zips</id> <phase>initialize</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <taskdef resource="net/sf/antcontrib/antlib.xml" classpathref="maven.plugin.classpath"/> <for param="filepath"> <path> <fileset dir="${zip.sourcedir}" includes="**/*.zip"/> </path> <sequential> <var name="for.filename" unset="true" /> <basename property="for.filename" file="@{filepath}" /> <unzip src="@{filepath}" dest="target/repair-temp/${for.filename}" encoding="UTF8" /> <replace file="target/repair-temp/${for.filename}/manifest.xml" token="&amp;" value="&amp;amp;" encoding="UTF8" /> <zip basedir="target/repair-temp/${for.filename}" destfile="target/${for.filename}" encoding="UTF8" /> </sequential> </for> </tasks> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>ant-contrib</groupId> <artifactId>ant-contrib</artifactId> <version>1.0b3</version> <exclusions> <exclusion> <groupId>ant</groupId> <artifactId>ant</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </plugin> </plugins> </build> 代替net/sf/antcontrib/antlib.xml才能使用net/sf/antcontrib/antcontrib.properties任务
  • 使用ant-contrib for任务:http://www.jguru.com/forums/view.jsp?EID=1374074

修改

在发布问题之后,我能够找到一些相关的问题,如果在实施类似的事情时遇到问题可能会有所帮助: