让Ant在不同情况下使用不同的构建类吗?

时间:2010-08-26 18:07:11

标签: java tomcat ant

我们使用Ant来构建Java Web应用程序。该应用程序将在Tomcat 6和Tomcat 5.5上编译和运行。但是,构建过程略有不同,具体取决于您安装的Tomcat版本:5.5在 $ CATALINA_HOME / common / lib $ CATALINA_HOME / server / lib中保留构建所需的jar文件,而6.0将它们全部保存在 $ CATALINA_HOME / lib 中。

如何根据build.properties中的设置设置Ant以选择正确的类路径?我甚至不得不在build.properties的设置中列出要包含在类路径中的目录,但是我无法使其工作。

有什么建议吗?

3 个答案:

答案 0 :(得分:4)

创建2个不同的路径项:

<path id="path.tomcat55">
    <fileset ... (tomcat5.5 files) />
</path>

<path id="path.tomcat6">
    <fileset ... (tomcat6 files) />
</path>

然后创建单独的目标,用于构建55,使用tomcat55路径,另一个使用tomcat6构建6。

<target name="compile.tomcat55" depends="build">
    <echo message="Compiling for Tomcat 5.5" />
    <javac srcdir="${project.basedir}/src/test" destdir="${build.dir}" fork="true" source="1.5" classpathref="path.tomcat55" />
</target>

<target name="compile.tomcat6" depends="build">
    <echo message="Compiling for Tomcat 6" />
    <javac srcdir="${project.basedir}/src/test" destdir="${build.dir}" fork="true" source="1.5" classpathref="path.tomcat6" />
</target>

然后,只需调用适当的目标。

答案 1 :(得分:2)

因为目录结构对于Tomcat 5.5和Tomcat 6.0是互斥的,所以你可以指定它们中的所有3个,然后ant将只选择可用的内容:

<classpath>
  <fileset dir="${catalina.home}/lib"
    erroronmissingdir="false"
  >
    <include name="**/*.jar"/>
  </fileset>
  <fileset dir="${catalina.home}/common/lib"
    erroronmissingdir="false"
  >
    <include name="**/*.jar"/>
  </fileset>
  <fileset dir="${catalina.home}/server/lib"
    erroronmissingdir="false"
  >
    <include name="**/*.jar"/>
  </fileset>
</classpath>

指定erroronmissingdir="false",因此ant不会抱怨缺少目录。

答案 2 :(得分:0)

我会选择一个更简单的解决方案。只需在构建路径中添加3个目录即可。如果找不到类路径元素,Ant / javac应该忽略。