Ant - 压缩多个文件夹
Ant - Zip Multiple Folders
我正在尝试 运行 Maven 中的 Ant 作业来查看文件夹,并根据该文件夹中的文件夹数量,创建 x 个具有该文件夹名称的 zip 文件.我让它手动工作,但如果我每次向此结构添加新文件夹时都不必编辑 pom,那就太好了。
<configuration>
<target name="zip">
<zip destfile="root/sub1/sub1.jar">
<zipfileset dir="root/sub1/unpacked/" includes="**" ></zipfileset>
</zip>
</target>
</configuration>
如果我要将 sub2 添加到根目录,我希望它被自动拾取,并创建一个 sub2.jar 文件(是的,我是 ware 我'我使用 .jar,但获取这些文件的程序需要 .jar 文件,但它们不是 jar 文件,因为它们包含任何 Java 代码,它们只是带有 jar 扩展名的 zip 文件)
我试过了
谢谢我看了第一个link,但也许我做错了
<target name="checkDir">
<foreach target="zip" param="theFile">
<dirset dir="root" casesensitive="yes">
<include name="**"/>
</dirset>
</foreach>
</target>
<target name="zip">
<!-- <zip destfile="root/${theFile}/${theFile}.jar">
<zipfileset dir="root/${theFile}/unpacked/" includes="**" ></zipfileset>
</zip> -->
<echo message="${theFile}"/>
</target>
我刚刚得到
[INFO] --- maven-ant运行-plugin:1.7:运行 (process-javascript-plugin) @ war---
[信息] 正在执行任务
邮编:
[回声] ${theFile}
[INFO] 已执行的任务
好像还是不行。
pom.xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>process-cartridges</id>
<phase>compile</phase>
<configuration>
<target>
<ant antfile="root/build-main.xml"/>
</target>
</configuration>
</execution>
</executions>
</plugin>
构建-main.xml
<?xml version="1.0" encoding="UTF-8" ?>
<project>
<target name="checkDir">
<foreach target="zip" param="theFile">
<dirset dir="root" casesensitive="yes">
<include name="**"/>
</dirset>
</foreach>
</target>
<target name="zip">
<zip destfile="root/${theFile}/${theFile}.jar">
<zipfileset dir="root/${theFile}/unpacked/" includes="**" />
</zip>
<echo message="TESTZIP ${theFile}"/>
</target>
</project>
似乎没有用。我错过了什么吗?
您可以使用 Ant 的 foreach
任务来执行此操作,结合这两个帖子的答案:Ant: How to execute a command for each file in directory? and Calling foreach in maven-antrun-plugin。
但是,您也可以使用 iterator-maven-plugin
的 Maven 解决方案遍历所有子文件夹,然后使用 maven-jar-plugin
制作 jar:
<plugin>
<groupId>com.soebes.maven.plugins</groupId>
<artifactId>iterator-maven-plugin</artifactId>
<version>0.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>iterator</goal>
</goals>
<configuration>
<folder>root/</folder>
<pluginExecutors>
<pluginExecutor>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
</plugin>
<goal>jar</goal>
<configuration>
<classesDirectory>root/@item@/unpacked</classesDirectory>
<outputDirectory>root/@item@</outputDirectory>
<finalName>@item@.jar</finalName>
</configuration>
</pluginExecutor>
</pluginExecutors>
</configuration>
</execution>
</executions>
</plugin>
这绑定到 package
阶段。它将遍历 root
文件夹的所有直接子文件夹,并使用给定的配置调用 jar 插件。 @item@
用于引用当前目录名
我正在尝试 运行 Maven 中的 Ant 作业来查看文件夹,并根据该文件夹中的文件夹数量,创建 x 个具有该文件夹名称的 zip 文件.我让它手动工作,但如果我每次向此结构添加新文件夹时都不必编辑 pom,那就太好了。
<configuration>
<target name="zip">
<zip destfile="root/sub1/sub1.jar">
<zipfileset dir="root/sub1/unpacked/" includes="**" ></zipfileset>
</zip>
</target>
</configuration>
如果我要将 sub2 添加到根目录,我希望它被自动拾取,并创建一个 sub2.jar 文件(是的,我是 ware 我'我使用 .jar,但获取这些文件的程序需要 .jar 文件,但它们不是 jar 文件,因为它们包含任何 Java 代码,它们只是带有 jar 扩展名的 zip 文件)
我试过了
谢谢我看了第一个link,但也许我做错了
<target name="checkDir">
<foreach target="zip" param="theFile">
<dirset dir="root" casesensitive="yes">
<include name="**"/>
</dirset>
</foreach>
</target>
<target name="zip">
<!-- <zip destfile="root/${theFile}/${theFile}.jar">
<zipfileset dir="root/${theFile}/unpacked/" includes="**" ></zipfileset>
</zip> -->
<echo message="${theFile}"/>
</target>
我刚刚得到
[INFO] --- maven-ant运行-plugin:1.7:运行 (process-javascript-plugin) @ war--- [信息] 正在执行任务
邮编: [回声] ${theFile} [INFO] 已执行的任务
好像还是不行。
pom.xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>process-cartridges</id>
<phase>compile</phase>
<configuration>
<target>
<ant antfile="root/build-main.xml"/>
</target>
</configuration>
</execution>
</executions>
</plugin>
构建-main.xml
<?xml version="1.0" encoding="UTF-8" ?>
<project>
<target name="checkDir">
<foreach target="zip" param="theFile">
<dirset dir="root" casesensitive="yes">
<include name="**"/>
</dirset>
</foreach>
</target>
<target name="zip">
<zip destfile="root/${theFile}/${theFile}.jar">
<zipfileset dir="root/${theFile}/unpacked/" includes="**" />
</zip>
<echo message="TESTZIP ${theFile}"/>
</target>
</project>
似乎没有用。我错过了什么吗?
您可以使用 Ant 的 foreach
任务来执行此操作,结合这两个帖子的答案:Ant: How to execute a command for each file in directory? and Calling foreach in maven-antrun-plugin。
但是,您也可以使用 iterator-maven-plugin
的 Maven 解决方案遍历所有子文件夹,然后使用 maven-jar-plugin
制作 jar:
<plugin>
<groupId>com.soebes.maven.plugins</groupId>
<artifactId>iterator-maven-plugin</artifactId>
<version>0.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>iterator</goal>
</goals>
<configuration>
<folder>root/</folder>
<pluginExecutors>
<pluginExecutor>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
</plugin>
<goal>jar</goal>
<configuration>
<classesDirectory>root/@item@/unpacked</classesDirectory>
<outputDirectory>root/@item@</outputDirectory>
<finalName>@item@.jar</finalName>
</configuration>
</pluginExecutor>
</pluginExecutors>
</configuration>
</execution>
</executions>
</plugin>
这绑定到 package
阶段。它将遍历 root
文件夹的所有直接子文件夹,并使用给定的配置调用 jar 插件。 @item@
用于引用当前目录名