Ant:通过javac任务使用文件集
我想使用FileSet来准确地指出我想用Javac任务编译哪些文件。 我不想要任何隐含的行为。 然而,我的尝试却失败了。 这是迄今为止我所得到的结果:
包含我所有源文件的FileSet。
<fileset id="srcfiles" dir="${srcdir}">
<include name="**/*.java"/>
</fileset>
并尝试将其传递给javac。
<target name="build">
<javac srcdir=".">
<fileset refid="srcfiles"/>
</javac>
</target>
这给了我这个错误: javac doesn't support the nested "fileset" element.
在阅读Ant文档之后,我尝试将最内层的标记从fileset
更改为源sourcepath
。 这在文件被编译的意义上工作,但它仍然出错: srcfiles doesn't denote a path
。 我认为源只是由于隐含的规则而编译的。
我怎样才能明确地告诉javac我想编译的单个文件? 或者这不是蚂蚁应该如何工作? 我来自C ++背景,其中识别源文件是构建过程的重要组成部分。 但是,鉴于Java的文件命名和目录结构要求,可能隐含的**/*.java
模式规则涵盖了所有用例。
javac的ant手册说:
如果您希望仅编译明确指定的文件并禁用javac的默认搜索机制,则可以取消设置sourcepath属性:
<javac sourcepath="" srcdir="${src}"
destdir="${build}" >
<include name="**/*.java"/>
<exclude name="**/Example.java"/>
</javac>
不过,我认为这不是一个好主意。 在设计良好的项目中,应该编译给定目录(或一组目录中)的所有文件。 不应该编译的文件应该不存在,或者应该放在单独的目录中。
你想要什么 ? 编译单个目录下的所有* .java代码? 或者只编译一个文件?
如果你想编译你所有的java源代码? 然后,您必须定义您的源代码文件所在的位置,然后您必须定义构建目录所在的位置。 编译您的java代码后,此构建目录用于* .class文件。
简单的方法是,首先你必须创建一个文件build.properties在这个文件中,你可以定义你的源代码目录的位置,你的构建目录等等。这是build.properties文件的简单例子
# Source Code Properties ---------------------------
project.dir=.
src.dir=${folder.project}/src
dist.dir=${folder.project}/dist
build.dir=${folder.project}/build
test.dir=${folder.project}/testing
然后,在你的build.xml文件中,你可以像这样编译你的java代码:
<!-- define build.properties file -->
<property file="build.properties" />
<target name="compile" description="Compile all java code from src dir">
<javac srcdir="${src.dir}"
destdir="${build.dir}"
/>
</target>
通过这个ant任务,你可以在src目录下编译所有的java代码来建立目录。
在这种情况下用C / C ++术语思考是徒劳的。 在C / C ++中,您通常有一个Makefile,您可以列出所有要编译的文件,每个*.c
或*.cc
文件从编译器的角度来看都是相互独立的。
对Java来说恰恰相反:如果只向Java编译器提供一个文件,并且此类引用了其他类,则编译器希望以二进制形式查看“else”。 编译器会尝试三件事情:
这有点简化了,但是已经显示了C / C ++的大部分重点:
.class
文件和.java
文件之间的映射。 define
参数,优化设置等等 - 对于每个源文件可能都不相同。 这一切归结为Ant和Maven以及Java中任何体面的构建系统的工作方式:编译完整的源代码目录。 所以是的,这就是Ant想要工作的方式。
链接地址: http://www.djcxy.com/p/60373.html上一篇: Ant: Using a fileset with the javac task
下一篇: Replicating system libraries for Android from Eclipse to Ant