5

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

我的问题是最简单的方法是什么。

作为 Eclipse 平台的用户,我对 Eclipse 平台非常了解——但对于 Eclipse 的开发却一无所知。我知道,在运行时,我的 Ant 任务必须在与工作区相同的 JRE 下调用——这是我愿意接受的限制。

我首先创建了一个 Java 项目来保存我的 Ant 任务。我相信现在唯一阻碍我的是如何定义对 Eclipse 的 JAR 的 JAR 依赖。我显然不想依赖一个特定的 Eclipse JAR,因为它们是版本化的(例如,Eclipse 的“资源”插件)。是否可以让我的 Java 项目构建时间依赖于“资源插件的当前 JAR ”?

4

3 回答 3

2

我认为这篇文章很好地解决了您的问题:http ://www.ibm.com/developerworks/rational/library/09/eclipsecustomanttasks/

它面向 IBM Rational Application Developer,但它是基于 Eclipse 和 AFAIS 的,这里没有发生太多非 Eclipse 特定的事情,至少没有关于如何使任务在 Eclipse 中可用的细节(编写插件定义等)。

于 2011-02-04T22:28:28.897 回答
1

因此,您需要一个在 Eclipse 中运行的 Ant 任务。正如您所说,很明显这些任务正在使用 Eclipse API。到目前为止,我真的不明白他们是如何做到的。我已经查看了其中几个的来源,但我仍然有疑问。

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

如果您获得了贡献这些任务之一的插件的源包,您可以查看它的源。RefreshLocalTask​​ 在 org.eclipse.core.resources 中;不幸的是,当我将此包作为源项目导入我的工作区时,Ant 任务的源没有正确链接。它们有一个单独的 jar(在包内),并且,虽然源在包中,但不清楚 jar 是如何编译的。结果是我的工作区中没有编译 Ant 任务源。

您也可以 Google 搜索 Ant 任务源;这是3.6.0 的源代码RefreshLocalTask

无论如何,在源代码中,您可以看到对它的调用org.eclipse.core.resources.ResourcePlugin说明了您可能需要什么。

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

于 2010-10-06T23:27:13.333 回答
0

您可能应该多说一些您想做什么,因为您可以采取多种路线。

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

你不能做什么:我很确定当 Eclipse 启动 Ant 时,它总是在一个单独的 VM 中,无法回调 Eclipse。

所以也许你应该多说一些你想做的事。

于 2010-10-06T17:49:09.647 回答