今天我想执行这项任务,我遇到了一些问题。所以我在这里介绍我的问题以及我找到的解决方案。也许有人知道一个更简单的解决方案!
问题在于:我正在尝试构建一个使用Maven2构建的Java项目的分发包。在上一步中,生成了几个zip文件,这些文件都包含根目录中名为manifest.xml的文件,我想在所有这些ZIP文件中修改此XML文件。这是一个方案:
package-file-1.zip
|- contents(DIR)
\- manifest.xml
package-file-2.zip
|- contents(DIR)
\- manifest.xml
答案 0 :(得分:1)
此示例修改${zip.sourcedir}
中的zip文件,将所有zip文件的manifest.xml文件中的&
替换为&
,并将修改后的zip文件放在目录{ {1}}。
为此,它使用target
,包括maven-antrun-plugin
任务中的for
和var
任务(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="&" value="&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
在发布问题之后,我能够找到一些相关的问题,如果在实施类似的事情时遇到问题可能会有所帮助: