0

特定の .ZIP アーカイブからコンテンツを抽出する次の Ant ターゲットがあります。

<!-- UNPACK-MATH -->
<target name="unpack-math" depends="init-contrib">
  <!-- NOTE: the 'unzip' task doesn't fail when it cannot extract over read-only files; however, 'copy' with a 'zipfileset' does. -->
  <first id="math.archive">
    <fileset dir="${builddir}" includes="MATH_MF*.zip" />
  </first>
  <if>
    <length string="${toString:math.archive}" when="greater" length="0" />
    <then>
      <copy todir="${basedir}">
        <zipfileset src="${toString:math.archive}" />
      </copy>
    </then>
    <else>
      <echo message="No math to unpack." />
    </else>
  </if>
</target>

今やりたいことは、抽出されたファイルを「クリーンアップ」することです。ただし、次の場合は機能しません。

<!-- CLEAN-MATH -->
<target name="clean-math" depends="init-contrib">
  <first id="math.archive">
    <fileset dir="${builddir}" includes="MATH_MF*.zip" />
  </first>
  <if>
    <length string="${toString:math.archive}" when="greater" length="0" />
    <then>
      <delete>
        <zipfileset src="${toString:math.archive}" />
      </delete>
    </then>
    <else>
      <echo message="No math to clean." />
    </else>
  </if>
</target>

次のスタック トレースを取得します。

BUILD FAILED
D:\Development\MForce\Games\gamebuild.xml:214: java.lang.ClassCastException: class org.apache.tools.ant.types.resources.ZipResource doesn't provide files
        at org.apache.tools.ant.types.resources.comparators.FileSystem.resourceCompare(FileSystem.java:43)
...

何か案は?

4

1 に答える 1

0

この解決策は機能しているように見えますが、最初に.ZIPアーカイブ(削除するファイルを他のルートとしてリストする)を解凍する必要があります。これは避けたいと思います。

<!-- CLEAN-MATH -->
<target name="clean-math" depends="init-contrib">
  <first id="math.archive">
    <fileset dir="${builddir}" includes="MATH_MF*.zip" />
  </first>
  <if>
    <length string="${toString:math.archive}" when="greater" length="0" />
    <then>
      <unzip dest="${builddir}/tmp" src="${toString:math.archive}"/>
       <delete>
        <fileset dir="${basedir}" includes="**/*">
          <present present="both" targetdir="${builddir}/tmp"/>
        </fileset>
      </delete>
      <delete dir="${builddir}/tmp"/>
    </then>
    <else>
      <echo message="No math to clean." />
    </else>
  </if>
</target>
于 2013-02-13T14:48:10.927 に答える