我试图使用ant 1.8.1执行java编译。由于要求,我必须在循环中编译多个java源文件夹(包含java文件)。这些文件夹名称将从属性文件中提到的java项目派生。从循环本身我需要执行java编译。所以我使用了一个macrodef,我传递了所有必需的java源代码编译参数。本质上,我有一个main build.xml文件,我在这里调用build_Compile.xml(这是为了确定要构建哪些Java项目及其相应的源文件夹,并为每个项目执行循环编译)。为了实现这一点,我使用了一个helper文件(Helper.xml)文件中定义的macrodef,该文件包含了多个macrodef。
但是,当我执行任务时,我收到一个错误,这意味着没有正确找到java src路径(作为参数传递)。我注意到的是构建文件的路径(我的所有构建* .xml文件都驻留在其中)是在java src目录路径之前附加的(在macrodef中作为参数传递)。我打印了传递给macrodef的参数,它看起来像预期的那样。这是我用于java源代码编译的片段 -
..... .....
<javac srcdir="@{srcpath}"
destdir="./Temp/build/classes/"
includeAntRuntime="false"
classpath="${classpath}"
includes="${replacedartefacts}">
</javac>
对不起,故事很长。欣赏任何指针/指南。感谢。
答案 0 :(得分:1)
我对循环的想法感到有些困惑。我可以通过两种方式来考虑这个问题:
在第一个示例中,每个<javac>
调用都依赖于已编译的类文件。在第二种情况下,您正在编译的每组Java源都独立于其余的
您不会提供您所获得的错误或@{srcdir}
的值,这将有所帮助。
我注意到你有一个includes
参数。这是要包含的java文件列表。我也注意到这是一个属性。这意味着一旦设置就无法更改。为什么你有一个包含参数?如何为 ALL 项目指定要编译的特定文件集会影响您要执行的操作。这有点像*.java
吗?对于您正在编译的每组源目录,这是否相同?
这可能是${basedir}
属性的问题吗?当您使用<ant>
或<import>
时,您的${basedir}
设置为调用程序的${basedir}
,而不是被调用程序中的${basedir}
。
使用-d
参数运行Ant。这将产生数百行输出,但会准确显示每次调用<javac>
时发生的情况。如果您还发布确切的错误消息以及可能有关项目设置方式的更多信息,我们可以为您提供更多帮助。
谈论循环,请查看Ant-Contrib任务,尤其是for任务。另请参阅Ant subant任务。 <for>
任务为您提供了一种轻松遍历一堆目录参数的方法。 <subant>
任务是为主构建构建子项目。