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