编写一个支持Eclipse的Ant任务

时间:2010-10-06 16:03:17

标签: eclipse ant eclipse-pde

我想编写一个简单的Ant任务,它将与Eclipse工作区交互以从中获取一些信息。我希望能够使用各种Eclipse API(例如,IWorkspace)。

我的问题是如何做到这一点最简单的方法。

作为Eclipse用户,我对Eclipse平台有很好的了解 - 但是没有Eclipse平台的开发。我理解,在运行时,我的Ant任务必须在与工作空间相同的JRE下调用 - 这是我愿意接受的限制。

我开始创建一个Java项目来保存我的Ant任务。我相信现在我唯一能做的就是如何在Eclipse的JAR上定义JAR依赖。我显然不希望依赖于一个特定的Eclipse JAR,因为它们是版本化的(例如,Eclipse的“Resources”插件)。是否有可能让我的Java项目构建时依赖于“无论当前的JAR是什么资源插件”?

3 个答案:

答案 0 :(得分:2)

我认为这篇文章非常适合您的问题:http://www.ibm.com/developerworks/rational/library/09/eclipsecustomanttasks/

它针对的是IBM Rational Application Developer,但是它基于Eclipse和AFAIS,这里没有过多的非eclipse特定事件发生,至少没有关于如何在Eclipse中提供任务的具体细节(编写插件定义等)。

答案 1 :(得分:1)

因此,您需要在Eclipse中运行的Ant任务。正如您所说,很明显这些任务正在使用Eclipse API。截至目前,我并不真正理解他们是如何做到的。我看了几个人的来源,我仍有疑问。

要查找Eclipse提供的所有Ant任务的位置,请执行org.eclipse.ant.core.antTasks的插件搜索。当我这样做时,我会看到大约20个扩展,其中许多扩展定义了多个任务。

如果您获得了一个贡献其中一个任务的插件的源包,您可以查看它的源代码。 RefreshLocalTask​​位于org.eclipse.core.resources中;遗憾的是,当我将此捆绑包作为源项目导入我的工作区时,Ant任务的源无法正确链接。在它们中有一个单独的jar(在bundle中),虽然源在bundle中,但是不清楚如何编译jar。结果是我没有在我的工作区中编译Ant任务源。

您还可以使用Google作为Ant任务源;这是RefreshLocalTask的{​​{3}}。

无论如何,在源代码中,您可以看到org.eclipse.core.resources.ResourcePlugin的来电,说明您可能需要的内容。

啊,我在扩展点描述中看到 - 右键单击​​其中一个搜索结果并选择“显示描述”,或者从Manifest编辑器那里去 - 那里有一个你可以设置的标志,“eclipseRuntime”;该文本暗示如果设置,Eclipse将在同一个VM中启动任务。

答案 2 :(得分:0)

您可能应该多说一些您想做的事情,因为您可以采取多种途径。

  1. Eclipse提供了一些可以在构建脚本中使用的Ant任务。 Here是少数。还有更多,所以在Eclipse文档中搜索“ant任务”;它们分散在不同的页面中。 Eclipse Preferences(Window..Preferences,然后选择Ant / Runtime,并查看Classpath选项卡中的“Contributed Entries”)显示了Eclipse从Eclipse调用Ant时为运行时提供的Ant任务列表;只要你包含正确的jar,你就可以自己调用这些任务。
  2. 可以从Ant任务中启动Eclipse,因为可以从Java启动Eclipse。您需要包括正确的罐子并拨打正确的电话;您还需要正确配置Eclipse。 “org.eclipse.core.runtime.adaptor.EclipseStarter”应该会给你一些细节。
  3. 也许你可以使用Eclipse定义的一个或多个变量来启动Ant(或任何其他程序)。尝试创建外部工具配置(在“运行”菜单的底部) - 选择一个Ant构建并尝试使用参数(来自Main选项卡)或环境变量(来自Environment)选项卡进行自定义。两者都允许您访问Eclipse变量。但是,这些只是您可以传递到Ant脚本的值,而不是可以调用方法的任何句柄。
  4. 你不能做什么:我很确定当Eclipse启动Ant时,它总是在一个单独的VM中,无法回调到Eclipse。

    所以也许你应该多说一下你想做什么。