【问题标题】:Integrate Ant builder into Eclipse: Relative paths for refresh scope working set将 Ant builder 集成到 Eclipse:刷新范围工作集的相对路径
【发布时间】:2011-11-16 09:29:25
【问题描述】:

这个问题类似于Integrate Ant builder into Eclipse: Error "Variable references empty selection",但要求的内容不同。

在我的 Eclipse JDT 项目中,我有一些要在编译之前执行的 ant 任务,所以我在我的 Eclipse 构建器配置中添加了一个 ant 构建器。现在我想为此构建器配置“完成时刷新资源”和“相关资源的工作集”两个选项,以便它们包含我项目中的特定目录。

两者都允许我用这个dialogue 指定一个“工作集”。问题是这会将路径放在与工作空间相关的 Eclipse 构建器配置文件中,因此路径将包含项目名称。

问题是整个项目是在一个颠覆存储库中管理的。 Eclipse 配置是存储库的一部分,其他用户使用不同的文件系统布局和可能不同的 Eclipse 项目名称来检查它。例如,我通常在我的 Eclipse 工作区中有同一个项目的多个工作副本,当然每个副本都有不同的项目名称。

这就是为什么我正在寻找一种方法如何在 Eclipse 中指定相对于项目目录的工作集(不是工作区目录),或 其他定义刷新范围的方法构建器,使其在我的项目中包含一个目录

我正在使用 Eclipse 3.7 (Indigo)。

如果我在对话框中配置工作集,然后在配置文件中查看,以下字符串是ATTR_REFRESH_SCOPE 选项的值:

${working_set:
<?xml version="1.0" encoding="UTF-8"?>

<resources>

<item path="/MyProject" type="4"/>

</resources>}

净化后的样子如下:

${working_set:
  <?xml version="1.0" encoding="UTF-8"?>
  <resources><item path="/MyProject/lib" type="2"/></resources>
}

所以我想从中获得“MyProject”部分。我尝试了上述问题的解决方案,并将路径替换为${build_project:/lib}。这不会给出错误消息,但似乎没有效果(Eclipse 不会刷新提到的目录)。

我还尝试用${build_project:/lib} 替换整个工作集定义,但这会给出错误消息Unable to restore resource memento

我知道我可以告诉 Eclipse 在构建器运行后刷新整个项目,但这不是我想要的(它很慢)。同样对于“相关资源”配置选项,这意味着构建器在项目中的每次更改后都会不必要地运行。

【问题讨论】:

  • 您找到解决方案了吗?
  • 不,我仍在寻找解决方案。感谢您添加赏金。

标签: java eclipse ant


【解决方案1】:

不幸的是,Eclipse 不适合使用相对目录。

Relative Paths in Eclipse

但是您可以执行以下操作:

  • 创建一个新工作区。
  • 从所有机器上都相同的已知位置导入文件。
  • 配置该已知目录中的所有内容。
  • 向其他开发人员提供工作区和设置说明,以便他们使用相同的“已知目录”。

你可以有类似的东西

C:\YourKnownDir\
    \workspace\
    \src\
    \build\

并使用批处理文件启动 eclipse:

start %ECLIPSE_DIR%\eclipse.exe -data .\workspace

如果您要在 SVN 中包含 .project 文件,那么确实应该有一个预先确定的完整路径。例如:

C:\svn

希望对您有所帮助,但我不知道有什么其他方法可以解决这个问题。

【讨论】:

  • 不幸的是,这对我来说是不可能的。我真的需要相对于项目目录的路径,而不是相对于工作区的路径,例如在我的工作区中启用同一个项目的多个实例。此外,对于其他开发人员来说,其他所有事情都会非常不方便,这些开发人员并不都在我的团队中(该项目是开源的)。像C:\svn 这样的完整绝对路径更不可能,因为大多数开发人员都在 Linux 上工作。
【解决方案2】:

如何在存储库中添加一个文件夹级别?让我们将项目添加到存储库的一个文件夹中。这样每当签出项目时,它都会创建一个带有项目名称的文件夹。
目前,如果您在文件夹 workspace1 中签出项目。它一定是这样的:

workspace_1\lib

如果您在 repo 中添加一个文件夹级别,即项目名称(例如 MyProject 此处),则签出该项目的每个人都将获得相同的项目名称。并且项目的多个副本看起来像

workspace_1\MyProject\lib
workspace_2\MyProject\lib

这样,您可以始终创建具有相同项目名称的项目的多个副本,并且您的脚本可以始终利用项目名称的这种唯一性。

【讨论】:

  • 我不想使用多个 Eclipse 工作区(因为这意味着同时运行多个 Eclipse 副本)。目前它看起来不像workspace_1/lib,路径是workspace/project_copy1/libworkspace/project_copy2/lib等。在我的情况下(OSS项目)无法更改存储库结构。
  • 不需要新工作区。我只是用它作为例子。如果您在 repo 中有项目名称级别目录,并且您创建了多个副本,则它看起来像 workspace/project_copy1/MyProject/libworkspace/project_copy2/MyProject/lib
  • 如果您无法更改 repo 结构并且仍然希望所有用户使用通用的 ant 脚本,我建议您继续创建一个具有固定项目名称的脚本。在这种情况下,该项目的所有其他用户将被要求创建具有相同名称的项目副本。我认为公共文件夹名称对于您要解决的问题是必须的。
  • 对不起,这并不能解决问题。项目中的MyProject 文件夹没有改变路径中仍然存在不同项目名称这一事实。而且我不能依赖固定的项目名称,因为我需要在同一个工作区中多次使用同一个项目。
【解决方案3】:

完全不同的方法:

我认为共享 Eclipse 配置文件(即提交给 SVN 的配置文件)的局限性很大;有些人喜欢将他们的依赖库作为磁盘源,有些人喜欢 JAR 引用;每个用户的项目名称和工作区相对位置都不同,等等。如您所见,许多选项都与项目位置(即不能引用其他项目)或工作区位置相关。

因为我通常有 Maven 构建文件,所以我使用 maven-eclipse-plugin 从它们生成 Eclipse 配置文件。在运行时有几个选项可供选择,几乎所有内容都可以在构建文件中进行自定义(如果没有,只需将插件插入到该插件中即可执行您想要的操作,并将其与您的构建一起发布。Maven 将自动构建它如果使用它的用户需要插件)。还有一些更抽象的设置在插件之间共享,所以如果有人坚持使用 Netbeans 而不是 Eclipse,他至少会得到一个基本配置的项目(依赖项、JRE 版本、字符集等),而我从未使用过甚至已配置 Netbeans。

积极的副作用:当添加或更新一个库依赖时,只需要更新一个地方(Maven POM),其余的可以很容易地重新生成。

我确信这不是每个人的方法(尤其是如果您不仅将 Eclipse 用于开发,而且还用于构建最终工件,那么使用另一个构建系统可能看起来有点矫枉过正)。

【讨论】:

    【解决方案4】:

    在类似的情况下,我选择刷新“包含所选资源的项目”(正如您已经说过的,它不依赖于项目的名称)并标记为“派生资源”尽可能多的文件夹(文件夹的属性-> 资源 -> 复选框“派生”)。 Eclipse 将刷新派生资源,但不会尝试验证/重建/等。

    【讨论】:

    • 谢谢你的回答,不过,我还不明白。在这种情况下,将资源标记为“派生资源”如何防止 Eclipse 刷新它们?另外,您将哪些资源标记为派生?你的源文件?这不会造成其他问题吗?
    • 它不会阻止 Eclipse 刷新,它会阻止重建/重新验证文件。这适用于大型 XML/HTML 文件。
    • 感谢您的澄清。在这种情况下,它对我不起作用(如果有什么变化我确实想重建,我只是想在我知道只有几个文件发生变化的情况下防止整个项目无用的缓慢刷新)。
    猜你喜欢
    • 2016-01-30
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 2011-04-08
    相关资源
    最近更新 更多