【问题标题】:Modify files inside multiple zip files using Maven使用 Maven 修改多个 zip 文件中的文件
【发布时间】:2012-01-25 15:05:15
【问题描述】:

今天我想执行此任务,但途中遇到了一些问题。所以我在这里提出我的问题和我找到的解决方案。也许有人知道更简单的解决方案!

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

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

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

【问题讨论】:

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


    【解决方案1】:

    本示例修改${zip.sourcedir}中的zip文件,将所有这些zip文件的manifest.xml中的字符串&替换为&,并将修改后的zip文件放在目录target中。

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

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

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

    编辑

    发布问题后,我找到了几个相关的问题,如果有人在实施类似的事情时遇到问题,这可能会有所帮助:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-21
      • 1970-01-01
      • 2021-03-18
      • 2020-12-30
      • 2010-10-09
      • 2012-02-21
      • 1970-01-01
      相关资源
      最近更新 更多