运行 配置中的动态 Eclipse 项目值

Dynamic Eclipse Project Value in Run Configuration

我正在处理 Java 和配置如下的 C++ 模块的存储库:

回购结构

Repo/
- ModuleA/
  - src/
    - ...
  - ModuleA.launch
  - ...
- ModuleB/
  - ... # same as above.
- ...

我关心的是启动脚本的定义(IE:上面的ModuleA.launch);具体来说,这些脚本的 PROJECT_ATTR 值。如果我们打开这些启动脚本,它们包含如下条目:

ModuleA.launch

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
<!-- or <launchConfiguration type="org.eclipse.cdt.launch.applicationLaunchType> -->
...
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="ModuleA"/>
<!-- or <stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="ModuleA"/> -->
...
</launchConfiguration>

上面的问题是,如果模块没有被签出 exactly ModuleA,运行 脚本将找不到项目(这是脆弱的) .据我所知,这个字段不能用变量填充(IE:value="${project_name}")。

有没有什么方法可以告诉启动脚本使用包含项目作为项目值(或产生类似体验的任何合理解决方法)?如果相关,Eclipse 版本是 Kepler SR2(并且无法更改)。

调查:

查看CDT代码,这个属性只在一处设置。它在包 org.eclipse.cdt.launch.ui int the class CMainTab2 (for CDT version over 7.3, otherwise it's in CMainTab) 中,在函数 performApply().

的第 344 行

此 class 在 UI window 中定义了名为 "main" 的选项卡,用于配置 运行 配置(或调试配置)。如下图所示:

函数 performApply() 每次刷新此选项卡(因此当您打开或关闭它时)以及单击 "apply" 按钮(位于 window).

这个函数只是在启动配置中设置了一些属性。其中之一是项目名称 (ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME)。该属性设置为fProjText.getText()的值,也就是下图window中的文本框:

当您使用上次构建的项目名称创建 运行 配置(或调试配置)时,此文本框会自动填充。

注意:我没有看JDT代码,但我想是一样的


解决方案

1) 什么都不改,因为可能是故意这样的(虽然我也不知道为什么)。 注意: 我觉得这个值只有修改了才有可能是错误的,所以我觉得这就是为什么硬写在.launch 脚本.

2) 您可以修改 Eclipse 代码以不使用文本框值,而是像 "${project_name}" 这样的东西。 注意:我不推荐这样做,因为更新项目以跟随 eclipse 更新会更难。

2 bis) 不是重写 Eclipse 代码,而是扩展 CMainTab2 class 来覆盖performApply() 方法将属性设置为 "${project_name}".

3)不要修改任何代码,每次创建启动配置(运行或调试) ,修改文本框值为${project_name}。 (不过每次都要重新输入,很费力)

注: 不知道是否存在project_name这样的变量您可以调用 .launch 脚本。所以也许所有这些潜在的解决方案都是不可能的