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

Java 让Ant在不同的情况下使用不同的构建类?,java,tomcat,ant,Java,Tomcat,Ant,我们使用Ant构建JavaWeb应用程序。应用程序将在Tomcat 6和Tomcat 5.5上编译和运行。但是,根据您安装的Tomcat版本的不同,构建过程略有不同:5.5将构建所需的jar文件保存在$CATALINA_HOME/common/lib和$CATALINA_HOME/server/lib中,而6.0将它们全部保存在$CATALINA_HOME/lib中 如何设置Ant以根据build.properties中的设置选择正确的类路径?我甚至可以在build.properties中的一个

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

如何设置Ant以根据build.properties中的设置选择正确的类路径?我甚至可以在build.properties中的一个设置中列出要包含在类路径中的目录,但我一直无法做到这一点


有什么建议吗?

创建两个不同的路径项:

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

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

然后使用tomcat55路径为building 55创建单独的目标,使用tomcat6为building 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>


然后,只需调用相应的目标。

创建两个不同的路径项:

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

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

然后使用tomcat55路径为building 55创建单独的目标,使用tomcat6为building 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>


然后,只需调用相应的目标。

因为目录结构对于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就不会抱怨缺少目录。

因为目录结构对于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就不会抱怨缺少目录。

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

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

这似乎对我不起作用,Ant(或javac)抱怨缺少目录。这似乎对我不起作用,Ant(或javac)抱怨缺少目录。谢谢,这可能是我必须做的。我希望最终只有一个编译目标,但至少这应该是可行的。谢谢,这可能是我必须要做的。我希望最终只有一个编译目标,但至少这应该是可行的。