我有一个Java项目,选择标准Java Builder作为唯一的构建器。此外,构建被配置为自动构建。
我想了解的是当我向这个项目(project -> properties -> builders
)添加一个ant构建时产生的构建环境。我所期望的是,每次我对Java源代码进行更改时,Java Builder和我的ant构建都将运行,但似乎我的ant构建没有运行。
当我第一次添加ant构建时,它运行,即我在控制台中看到输出。但是,当我对源文件进行更改时,它不会再次运行,也就是说,我不会在控制台中看到输出。我知道Java Builder还在运行,因为我的更改已经进入了eclipse代码感知,也就是说,我可以从其他类中引用这些更改,等等。
注意,如果我手动调用构建,即通过Project -> Build All
,则会运行ant构建,即我再次在控制台中看到输出。
那么,为什么我添加的ant构建不能与自动构建一起运行?请注意,我并不一定期望它能够执行增量工作,因为它不是为此而设计的,但我认为它会在Java Builder启动时启动?我错过什么了吗?
ant构建器,或任何其他的构建器,有几个方法来构建一个项目。当Eclipse中发生构建时,调用所有活动构建器的build(int kind, Map<String, String> args, IProgressMonitor monitor)
方法,但是,有不同类型的构建,任何构建器都可以在build
方法中检查。构建的种类有:
FULL_BUILD
AUTO_BUILD
INCREMENTAL_BUILD
CLEAN_BUILD
下面是build的语法示例:
protected IProject[] build(int kind, Map<String, String> args, IProgressMonitor monitor) throws CoreException {
if (kind == FULL_BUILD) {
fullBuild(monitor);
} else {
IResourceDelta delta = getDelta(getProject());
if (delta == null) {
fullBuild(monitor);
} else {
incrementalBuild(delta, monitor);
}
}
return null;
}
正如你所看到的,构建器可以决定对某种类型的构建做出反应,甚至对不同的构建类型做出不同的反应,所以,我的猜测是,ant构建器的实现使得它只对完整构建做出反应,而不是增量构建。
您是否将Ant构建器配置为在"自动"构建期间运行?为此,选择构建器的属性,转到Targets
页面,并为Auto Build
使用Set Targets
。
我有一个Ant构建器,它在我的Eclipse项目中运行于各种构建(也用于保存编辑的源文件),并且我不记得更改了任何其他内容。