2009-10-27 48 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