从同一个 ANT 构建文件构建两个 jar 文件

Build two jar files from same ANT build file

我正在尝试构建两个 jar 文件 - 一个仅包含与应用程序相关的 classes,另一个包含测试用例。然而,生成的两个罐子同时具有 classes 和测试用例。

PFB 构建的片段 XML。

<target name="compile" description="generate the distribution" depends="init">
        <javac srcdir="${src}" debug="${debug}" destdir="${basedir}/dist/classes">
            <classpath refid="class.path" />
        </javac>
        <jar jarfile="${dist}/${jarname}.jar" basedir="${basedir}/dist/classes">
            <metainf  dir="${src}/META-INF"  includes="beans.xml" />
        </jar>
    </target>

    <target name="compilewithtest" description="generate the distribution with test" depends="init,compile">
        <javac srcdir="${test}" debug="${debug}" destdir="${basedir}/dist/classes">
            <classpath refid="class.path" />
        </javac>
        <jar jarfile="${dist}/${jarnamewithtest}.jar" basedir="${basedir}/dist/classes">
            <metainf  dir="${src}/META-INF"  includes="beans.xml" />
        </jar>
    </target>

    <target name="deploy">
        <antcall target="clean" />
        <antcall target="compile" />
        <antcall target="compilewithtest" />
        <antcall target="junitreport" />
    </target>

    <target name="clean">
        <delete dir="${basedir}/dist" />
        <delete dir="${basedir}/report" />
    </target>

是否无法从同一个 classes 目录生成两个 jar?我该如何解决这个问题?

编辑 -

如果 class 目录不同,它会起作用。是不是可以使用相同的目录。下面突出显示的部分是多余的。

<target name="compile" description="generate the distribution" depends="init">
        **<javac srcdir="${src}" debug="${debug}" destdir="${basedir}/dist/classes">**
            <classpath refid="class.path" />
        </javac>
        <jar jarfile="${dist}/${jarname}.jar" basedir="${basedir}/dist/classes">
            <metainf  dir="${src}/META-INF"  includes="beans.xml" />
        </jar>
    </target>

    <target name="compilewithtest" description="generate the distribution with test" depends="init,compile">
        <javac srcdir="${src}" debug="${debug}" destdir="${basedir}/dist/class">
            <classpath refid="class.path" />
        </javac>
        **<javac srcdir="${test}" debug="${debug}" destdir="${basedir}/dist/class">**
            <classpath refid="class.path" />
        </javac>
        <jar jarfile="${dist}/${jarnamewithtest}.jar" basedir="${basedir}/dist/class">
            <metainf  dir="${src}/META-INF"  includes="beans.xml" />
        </jar>
    </target>

    <target name="deploy">
        <antcall target="clean" />
        <antcall target="compile" />
        <antcall target="compilewithtest" />
        <antcall target="junitreport" />
    </target>

    <target name="clean">
        <delete dir="${basedir}/dist" />
        <delete dir="${basedir}/report" />
    </target>

下面这个模板应该可以工作:

<target name="compile">
    <antcall target="clean" />
    <!-- javac and jar without test-->
</target>
<target name="compilewithtest">
    <antcall target="clean" />
    <!-- javac and jar with test-->
</target>
<target name="deploy">
    <antcall target="compile" />
    <antcall target="compilewithtest" />
</target>
<target name="clean">
    <!-- Delete and create required directories -->
</target>

所以对于jar的每个compilation/building,执行"clean"。此外,我建议通过参数化 source/destination 文件夹的目标来为多个 jar 创建 compilation/jar 使用相同的目标。

基于以上输入的以下更改已解决问题。

<target name="compile" description="generate the distribution" depends="init">
        <javac srcdir="${src}" debug="${debug}" destdir="${basedir}/dist/classes">
            <classpath refid="class.path" />
        </javac>
        <jar jarfile="${dist}/${jarname}.jar" basedir="${basedir}/dist/classes">
            <metainf  dir="${src}/META-INF"  includes="beans.xml" />
        </jar>
    </target>

    <target name="compilewithtest" description="generate the distribution with test">
        <antcall target="clean" />
        <antcall target="init" />
        <javac srcdir="${src}" debug="${debug}" destdir="${basedir}/dist/classes">
            <classpath refid="class.path" />
        </javac>
        <javac srcdir="${test}" debug="${debug}" destdir="${basedir}/dist/classes">
            <classpath refid="class.path" />
        </javac>
        <jar jarfile="${dist}/${jarnamewithtest}.jar" basedir="${basedir}/dist/classes">
            <metainf  dir="${src}/META-INF"  includes="beans.xml" />
        </jar>
    </target>

    <target name="deploy">
        <antcall target="clean" />
        <antcall target="compile" />
        <antcall target="compilewithtest" />
        <antcall target="junitreport" />
    </target>

    <target name="clean">
        <delete dir="${basedir}/dist/classes" />
        <delete dir="${basedir}/report" />
    </target>