2009-10-27 3 views
1

동일한 API를 준수하는 플러그인을 빌드하는 개미 프로젝트가 여러 개 있습니다. 플러그인은 자체적으로 포함되도록 타사 라이브러리를 사용합니다. 개별 빌드 스크립트의 많은 동작이 유사하기 때문에 공통 부분을 공통 빌드 스크립트로 끌어 내기로 결정했습니다.개미 스크립트의 일반적인 jar 작업

원래 빌드 스크립트는 다음과 같이보고 :

PROJECTA/build.xml 파일 :

<project name="ProjectA" basedir="."> 
... 
    <target name="jar"> 
     <jar destfile="${project.target}" manifest="manifest.mf"> 
      <fileset dir="${project.build.bin.dir}" /> 
      <zipfileset src="externlib1.jar" /> 
      <zipfileset src="externlib2.jar" /> 
     </jar> 
    </target> 
... 
</project> 

ProjectB/build.xml 파일 :

여기
<project name="ProjectB" basedir="."> 
... 
    <target name="jar"> 
     <jar destfile="${project.target}" manifest="manifest.mf"> 
      <fileset dir="${project.build.bin.dir}" /> 
      <zipfileset src="externlib2.jar" /> 
      <zipfileset src="externlib3.jar" /> 
     </jar> 
    </target> 
... 
</project> 

내 빌드 스크립트를 볼 것입니다 리팩토링 후 :

Common.xml :

,
<project name="Common" basedir="."> 
... 
    <target name="jar"> 
     <jar destfile="${project.target}" manifest="common-manifest.mf"> 
      <fileset dir="${project.build.bin.dir}" /> 
      <zipfileset refid="extern.libs" /> 
     </jar> 
    </target> 
... 
</project> 

PROJECTA/build.xml 파일 :

<project name="ProjectA" basedir="."> 
... 
    <zipfileset id="extern.libs"> 
     <file file="externlib1.jar" /> 
     <file file="externlib2.jar" /> 
    </zipfileset> 
... 
    <import file="../common.xml" /> 
</project> 

ProjectB/build.xml 파일 :

<project name="ProjectB" basedir="."> 
... 
    <zipfileset id="extern.libs"> 
     <file file="externlib2.jar" /> 
     <file file="externlib3.jar" /> 
    </zipfileset> 
... 
    <import file="../common.xml" /> 
</project> 

그러나, 리팩토링 빌드가 작동하지 않습니다 - 나는 문제가 있다는 것을 생각 I 여러 개의 파일이있는 zip 파일 세트를 선언 할 수 없습니다.

공통 jar 태스크의 동작이 각 프로젝트의 빌드 스크립트에서 jar 태스크가 선언 된 동작과 동일하도록 파일 세트를 선언 할 수있는 방법을 이해할 수 없습니다. 누구든지 전에이 문제를 해결 했습니까? 같은 것을 성취 할 수있는 다른 방법이 있습니까?

답변

1

약간 까다 롭지 만 jar 개의 zipgroupfileset 작업이 도움이 될 수 있습니다.

ProjectA에서 이와 비슷한 기능이 작동합니다. 디렉토리를 추측하고 적절하게 조정하십시오.

<fileset dir="${project.build.lib.dir}" id="extern.libs"> 
    <include name="externlib1.jar" /> 
    <include name="externlib2.jar" /> 
</fileset> 

그런 다음 common.xml 파일에서 common-manifest.mf의 이름을 변경했습니다.

<target name="jar"> 
    <jar destfile="${project.target}" duplicate="preserve" manifest="common-manifest.mf"> 
     <zipgroupfileset refid="extern.libs"/> 
    </jar> 
</target> 
+0

zip 파일 세트에 포함 된 항아리는 모두 최종 프로젝트 병으로 확장되지 않습니다. iboisver

+0

@iboisver - 그것을 개정했습니다. 거기서 근본적으로 빠진 것 - 사과. 나는 이것에 대한 테스트를 해봤고 그것이 저에게 효과가있는 것처럼 보입니다. –