如何将.java源代码复制到Ant javac文件夹

如何将.java源代码复制到Ant javac文件夹,java,ant,build-process,Java,Ant,Build Process,我知道如何使用Ant复制文件和文件夹,但我感兴趣的是,我是否以及如何让javac任务将编译的源代码复制到输出目录 基本上,它与在jar任务中包含源代码的选项非常相似。为什么不简单地将任务与任务一起使用呢 您甚至可以使用ant的宏来定义自己的copyingjavac任务,该任务执行这两个操作,唯一的问题是正确处理文件集,以精确复制正在编译的文件集 如果只希望在编译成功时复制文件,则必须构建自定义ant任务(扩展默认的javac任务),或者使用ant_contrib foreach任务 macrod

我知道如何使用Ant复制文件和文件夹,但我感兴趣的是,我是否以及如何让javac任务将编译的源代码复制到输出目录

基本上,它与在jar任务中包含源代码的选项非常相似。

为什么不简单地将任务与任务一起使用呢

您甚至可以使用ant的宏来定义自己的
copyingjavac
任务,该任务执行这两个操作,唯一的问题是正确处理文件集,以精确复制正在编译的文件集

如果只希望在编译成功时复制文件,则必须构建自定义ant任务(扩展默认的javac任务),或者使用ant_contrib foreach任务

macrodef可能看起来像:

<macrodef name="copyingjavac">
  <attribute name="srcdir"/>
  <attribute name="destdir""/>
  <element name="arginclude"/>
  <sequential>
    <javac srcdir="@{srcdir}" destdir="@{destdir}" updatedProperty="build.success">
       <arginclude/>
    </javac>
    <copy todir="@{destdir}">
      <fileset dir="@{srcdir}">
        <arginclude/>
      </fileset>
    </copy>
    <fail unless="build.success">
      Build failed. Check the output...
    </fail>
  </sequential>
</macrodef>


我在Ant的网站上找到了这个答案(您可以删除“排除”部分来复制编译版本中的.java源代码):

。。。
...

这会将所有资源(只要它们没有后缀“.java”)复制到构建目录,因此,我们可以从该目录启动应用程序,这些文件将包含在jar中。

我认为他只想复制编译后的源文件。感谢您的输入,我将查看宏,但我真正感兴趣的是,这是否可以作为ant的javac任务内置参数的一部分。我会等着看我是否得到了明确的答复,如果没有,我会接受你的答复。顺便说一句,这包括什么@aioobe,我真的不在乎只复制已编译的源文件,因为我每次出于不同的原因删除所有类并将它们编译在一起。@Ittai,在javac任务中没有类似的东西,但是,您仍然可以使用相同的
srcdir
destdir
:这样,类文件将与源文件位于同一目录中。然后从那里建造你的罐子。谢谢,我想你是对的,没有其他选择。您能告诉我arginclude是什么吗?
arginclude
是一个宏参数,当您使用它时,它将被宏的子元素替换。这将启用诸如
之类的使用,并获取在宏扩展中传递的
包含。
...
<target name="compile">
    <mkdir dir="${classes.dir}"/>
    <javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath"/>
    <copy todir="${classes.dir}">
        <fileset dir="${src.dir}" excludes="**/*.java"/>
    </copy>
</target>
...