Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ant 循环中的Java编译问题_Ant - Fatal编程技术网

Ant 循环中的Java编译问题

Ant 循环中的Java编译问题,ant,Ant,我试图使用Ant1.8.1执行java编译。由于这个需求,我必须在一个循环中编译大量的java源文件夹(包含java文件)。这些文件夹名称将派生自属性文件中提到的java项目。我需要从循环本身执行java编译。因此,我使用了一个macrodef,其中传递了java源代码编译所需的所有参数。本质上,我有一个主build.xml文件,从中我调用build_Compile.xml(其职责是确定要构建哪些Java项目及其相应的源文件夹,并为每个项目执行循环编译)。为了实现这一点,我使用了一个在助手文件(

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

    <javac  srcdir="@{srcpath}" 
            destdir="./Temp/build/classes/" 
            includeAntRuntime="false" 
            classpath="${classpath}" 
            includes="${replacedartefacts}">
    </javac>
然而,当我执行任务时,我得到一个错误,这意味着没有正确地找到JavaSRC路径(作为参数传递)。我注意到构建文件的路径(我的所有构建*.xml文件都位于其中)被附加在java src目录路径之前(在macrodef中作为参数传递)。我打印了传递给macrodef的参数,看起来与预期的一样。下面是我用于java源代码编译的代码片段-

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

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

对不起,说来话长。感谢您的指点/指导。谢谢。

我对循环的想法有点困惑。对此,我有两种想法:

    <javac  srcdir="@{srcpath}" 
            destdir="./Temp/build/classes/" 
            includeAntRuntime="false" 
            classpath="${classpath}" 
            includes="${replacedartefacts}">
    </javac>
  • 您只有一个项目,但根据项目编译不同的源目录
  • 您有一个master build.xml,它调用一组包含要编译的源文件夹的子项目
在第一个示例中,每个
调用都依赖于已编译的类文件。在第二个场景中,您正在编译的每一组Java源代码都独立于其他源代码

    <javac  srcdir="@{srcpath}" 
            destdir="./Temp/build/classes/" 
            includeAntRuntime="false" 
            classpath="${classpath}" 
            includes="${replacedartefacts}">
    </javac>
您不会给出所得到的错误或
@{srcdir}
的值,这会有所帮助

    <javac  srcdir="@{srcpath}" 
            destdir="./Temp/build/classes/" 
            includeAntRuntime="false" 
            classpath="${classpath}" 
            includes="${replacedartefacts}">
    </javac>
我注意到您有一个
includes
参数。这是要包含的java文件列表。我还注意到这是一处房产。这意味着一旦设置,就无法更改。为什么有includes参数?为ALL项目指定要编译的特定文件集将如何影响您要执行的操作。这是像
*.java
这样的值吗?这对于您正在编译的每一组源目录都是相同的吗

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

这可能是
${basedir}
属性的问题吗?使用
任务时,尤其是任务。另外,请查看Ant任务。
任务为您提供了一种轻松循环一系列目录参数的方法。
任务是为一个主构建构建子项目制定的。

您到底遇到了什么错误?您好,我已经在一篇新文章“循环中的Java编译问题-续”中给出了所有细节。如果你能照我说的做,给我一些线索,那就太好了。谢谢大卫。我在一篇新的帖子“循环中的Java编译问题-续”中提供了详细信息。如果您能看一看并提供您的意见,那就太好了。
    <javac  srcdir="@{srcpath}" 
            destdir="./Temp/build/classes/" 
            includeAntRuntime="false" 
            classpath="${classpath}" 
            includes="${replacedartefacts}">
    </javac>