Модифицируйте файлы внутри нескольких zip-файлов, используя Maven - PullRequest
0 голосов
/ 25 января 2012

Сегодня я хотел выполнить эту задачу, и я столкнулся с некоторыми проблемами в пути. Итак, я представляю здесь свою проблему и найденное мной решение. Возможно, кто-нибудь знает более простое решение!

Проблема была в следующем: я пытался создать дистрибутив Java-проекта, созданного с помощью Maven2. На предыдущем шаге было сгенерировано несколько zip-файлов, содержащих файл с именем manifest.xml в корневом каталоге, и я хотел изменить этот XML-файл во всех этих ZIP-файлах. Это схема:

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

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

1 Ответ

1 голос
/ 26 января 2012

Этот пример изменяет zip-файлы в ${zip.sourcedir}, заменяя строку & на & в файле manifest.xml всех этих zip-файлов и помещает измененные zip-файлы в каталог target.

Для этого используются maven-antrun-plugin, включая задачи for и var из задач antcontrib (http://ant -contrib.sourceforge.net ).Это позволяет распаковать содержимое каждого 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:

Edit

После публикации вопроса я смог найти пару связанных вопросов, которые могли бы помочь, если у кого-то возникли проблемы с реализацией подобной вещи:

...