0

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

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

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

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

1 回答 1

1

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

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

<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 中获得了所需的知识:

编辑

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

于 2012-01-26T13:16:43.633 回答