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@用于引用当前目录名