ANT - 如何动态地将编译的类附加到类路径

时间:2014-09-10 18:55:44

标签: java ant classpath

设定:

项目A - 没有依赖项的纯Java项目。

项目B - 纯Java项目依赖于项目A.

过程:

我在每个项目根目录和一个主脚本中都有一个构建项目脚本,以正确的顺序运行它们,首先是项目A,然后是项目B.脚本输出是相对于每个项目的。路径。

该脚本适用于项目A,但是当涉及到项目B时,它会错过项目A的类输出。

使用ANT,有没有办法在编译类路径中添加"动态" 以前编译项目的输出?

或者,除了明确向Project B提供项目A的类输出路径之外,我可以采取任何行动吗?

1 个答案:

答案 0 :(得分:0)

好的,所以这需要一堆黑客攻击。

首先使用add ant-contrib to your ant,您可以从here下载。

然后我在主蚂蚁脚本中声明了var而不是属性。 在编译宏中,我将它作为类路径传递给javac。 编译完成后,我将新类输出文件夹附加到类路径var并调用下一个编译。

祝你好运。

编译脚本:

<?xml version="1.0"?>
<project name="PDF Test Client" default="main" basedir=".">
    <taskdef resource="net/sf/antcontrib/antlib.xml" />

    <macrodef name="Compile">
        <attribute name="ProjectName" default="   -- set aname to a 'ProjectName' property --" />
        <attribute name="ProjectRootDir" default="." />
        <attribute name="SourceDir" default="@{ProjectRootDir}/src" />
        <attribute name="OutputDir" default="@{ProjectRootDir}/output" />
        <attribute name="BuildDir" default="@{OutputDir}/bin" />
        <attribute name="ClassesDir" default="@{BuildDir}/classes" />

        <sequential>
            <echo message="Compiling... @{ProjectName}" />
            <mkdir dir="@{ClassesDir}" />
            <javac srcdir="@{SourceDir}" destdir="@{ClassesDir}" classpath="${ClassPathFolders}" includeantruntime="true" />
            <var name="ClassPathFolders" value="${ClassPathFolders}; @{ClassesDir}" />
            <echo message="-" />
        </sequential>
    </macrodef>

    <target name="main">
    </target>

</project>