2009-10-27 135 views
1

我有一堆構建插件的ant項目都符合相同的API。插件包含他們依賴的第三方庫,以便它們是獨立的。由於各個構建腳本中的許多行爲都是相似的,因此我決定將公共構件拖放到通用構建腳本中。ant構建腳本中的常見jar任務

原構建腳本看起來是這樣的:

項目A/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> 

項目B/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> 

項目A/build.xml文件:

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

項目B/build.xml文件:

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

然而,重構構建不工作 - 我認爲,問題是,我無法聲明具有多個文件的zipfileset。

我找不到一種方法可以聲明一個文件集,以便通用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

感謝您的建議,但我不認爲它的工作原理 - 包含在zipfileset中的jar沒有擴展到最終的項目jar中。如果我使用 iboisver 2009-10-27 23:04:08

+0

@iboisver - 我修改了它。錯過了基本的東西 - 道歉。我已經在這個測試上運行了,它看起來對我來說很有用。 – 2009-10-28 00:22:27