0

我试图使用 ant 1.8.1 执行 java 编译。由于要求,我必须在循环中编译多个 java 源文件夹(包含 java 文件)。这些文件夹名称将来自属性文件中提到的 java 项目。从循环本身我需要执行java编译。所以我使用了一个宏定义,我在其中传递了 java 源编译所需的所有参数。本质上,我有一个主要的 build.xml 文件,我从中调用 build_Compile.xml(其职责是确定要构建哪些 Java 项目及其相应的源文件夹,并为每个项目执行循环编译)。为了实现这一点,我使用了一个包含宏定义数量的帮助文件 (Helper.xml) 文件中定义的宏定义。

但是,当我执行任务时,我收到一个错误,这意味着没有正确找到 java src 路径(作为参数传递)。我注意到的是构建文件的路径(我所有的 build*.xml 文件所在的位置)被附加在 java src 目录路径之前(作为宏定义中的参数传递)。我打印了传递给看起来符合预期的宏定义的参数。这是我用于 java 源代码编译的片段 -

…………

    <javac  srcdir="@{srcpath}" 
            destdir="./Temp/build/classes/" 
            includeAntRuntime="false" 
            classpath="${classpath}" 
            includes="${replacedartefacts}">
    </javac>

对不起,故事很长。欣赏任何指针/指南。谢谢。

4

1 回答 1

1

对循环的想法有点困惑。我可以考虑两种方式:

  • 您有一个项目,但根据项目编译不同的源目录。
  • 您有一个主build.xml,它正在调用一堆包含要编译的源文件夹的子项目。

在第一个示例中,每个<javac>调用都依赖于已编译的类文件。在第二种情况下,您正在编译的每组 Java 源代码都独立于其余的

你没有给出你得到的错误或它的价值@{srcdir}会有所帮助。

我注意到你有一个includes参数。这是要包含的 java 文件的列表。我还注意到这是一个属性。这意味着一旦设置就无法更改。为什么你有一个包含参数?为所有项目指定要编译的特定文件集将如何影响您想要做的事情。这是某种价值*.java吗?对于您正在编译的每组源目录,这是否相同?

这可能是${basedir}物业的问题吗?当您使用<ant>or<import>时,您${basedir}的设置为调用程序的${basedir}而不是${basedir}被调用程序中的。

使用参数运行 Ant -d。这将产生数百行输出,但会准确显示每次调用<javac>. 如果您还发布了确切的错误消息,我们可以为您提供更多帮助,并且可能会提供有关项目设置方式的更多信息。

谈到循环,看看Ant-Contrib任务,尤其是for任务。还要查看 Ant subant任务。该<for>任务为您提供了一种轻松遍历一堆目录参数的方法。该<subant>任务是为构建子项目的主构建。

于 2012-10-22T04:05:36.367 回答