2012-02-28 2 views
1

개미 작업의 일부로 2 개의 zip 파일을 만들려고합니다. 둘 다 비슷하지만 몇 가지 추가 데이터가 있습니다. 따라서 코드를 줄이려면 파일 세트를 정의하고 참조해야합니다. 유일한 문제는 오류가 발생한다는 것입니다.refid로 zip 파일을 만드는 중 오류가 발생했습니다.

작업 :

<target name="create-zips" depends="cleanup, compile, package-jar"> 

    <zipfileset id="zipfiles"> 
     <zipfileset dir="${ant.project.name}-dist" includes="${jarname}.jar" prefix="${title}"/> 
     <zipfileset dir="${scripts.dir}" includes="myprogram" filemode="755" prefix="${title}"/> 
     <zipfileset dir="${scripts.dir}" includes="myprogram_gui" filemode="755" prefix="${title}"/> 
     <zipfileset dir="${scripts.dir}" includes="myprogram_gui.command" filemode="755" prefix="${title}"/> 
     <zipfileset dir="${scripts.dir}" includes="myprogram.bat" filemode="755" prefix="${title}"/> 
     <zipfileset dir="${scripts.dir}" includes="myprogram_gui.bat" filemode="755" prefix="${title}"/> 
     <zipfileset dir="${docs.dir}" includes="myprogram_readme.txt" prefix="${title}"/> 
    </zipfileset> 

    <zip destfile="${deploy.dir}/myprogram_${version}.zip" whenempty="fail" defaultexcludes="true"> 
     <zipfileset refid="zipfiles"/> 
     <zipfileset dir="${otherdata.dir}" includes="other/*.*" prefix="${title}"/> 
    </zip> 
    <zip destfile="${deploy.dir}/myprogram_noother_${version}.zip" whenempty="fail" defaultexcludes="true"> 
     <zipfileset refid="zipfiles"/> 
    </zip> 
</target> 

작업이 실행됩니다 : 나는 파일이 존재하는지 확인한

create-zips: 

BUILD FAILED 
/path/to/my/buildfile/build-tools.xml:119: Problem opening /path/to/my/data/docs/myprogram_readme.txt 

. 추가 정보를 제거하면 다른 파일에서 오류가 발생합니다. 또한 zip 파일 세트를 2 개의 별도 태그에 복사하여 붙여 넣으면 모든 것이 잘 작동합니다. 그러나 나는 그렇게하지 않을 것입니다.

편집 : 2011 년 10 월 14 일에 컴파일 된 Apache Ant (TM) 버전 1.8.2, Mac OS X 10.7. 다른 플랫폼에서 시도하지 않았습니다.

답변

0

한 번 해보려고했지만, 아무 소용이 없습니다. A fileset은 중첩 된 fileset을 허용하지 않습니다. 속임수를 사용하여 zipfileset을 외부 세트로 사용하면 ant는 그 내용을 zip 파일로 간주합니다. 개미가 파일의 압축을 풀려고하면 열기 오류이 발생합니다.

fileset에는 dir 속성이 있어야합니다. 이 디렉토리는 모든 파일 세트 구성 요소의 상위 디렉토리 여야합니다. 슬프지만 사실이야.

해결 방법이 종료되었습니다. X 파일 세트를 만듭니다. 이러한 파일 세트는 zip 태스크의 중첩 된 요소로 지정 될 수 있습니다. 주어진 경우에 당신이 X보다 필요한 경우, 모든 X 파일 세트에 대한 기본을하고, 항상

<!-- define X empty filesets --> 
<fileset dir="c:\temp\1" includes="asdfasdf.neverhappens" id="nullfileset" /> 
<fileset id="zipfileset2" refid="nullfileset" /> 
<fileset id="zipfileset3" refid="nullfileset" /> 

<!-- here go real sets --> 
<zipfileset dir="${scripts.dir}" includes="myprogram" /> 

개미 파일 세트에주의 모든 X를 압축. 그들은 변경할 수 있습니다. 나는 그것에 대해 "질문"을 한 번 쓴 적이 있지만 누군가 그것을 삭제했다. 조용하게 일해라, 사람들을 쌓아 라, "고마워".

EDIT1 : 리눅스 하나에 dir="/"을 시도하고 fileset 안에 중첩 selectors를 사용할 수 있습니다. 내 문제 때문에 Windows에 있었기 때문에 그렇게 할 수 없었습니다. Windows에는 "/"가없고 다른 드라이브에서 파일을 수집했습니다.

+0

파일 세트를 중첩하는 것이 좋지만 일정량의 의미가 있습니다. 필자의 경우에는 선택기를 사용할 수 있습니다. 모든 관련 파일에 대한 상위 디렉토리가 있기 때문입니다. – node1377

+0

하지만 그 또 다른 문제를 상기 시켰습니다. 나는 경로를자를 수 없었고 지퍼는 루트에서 내 파일까지 전체 경로를 유지했습니다. 어쩌면 그것을 어떻게 든 고칠 수있을 것입니다. – Jarekczek