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

时间:2018-04-10 20:22:00

标签: java c++ eclipse eclipse-cdt eclipse-jdt

我正在处理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>

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

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

1 个答案:

答案 0 :(得分:1)

调查:

查看CDT代码,此属性仅在一个位置设置。它位于CMainTab2org.eclipse.cdt.launch.ui中(对于CDT版本超过7.3,否则它在CMainTab中),在第344行,在函数中performApply()

此类定义名为&#34; main&#34;的选项卡。在用于配置运行配置(或调试配置)的UI窗口中。如下图所示: Main Tab

每次刷新此选项卡时都会调用函数performApply()(当您打开或关闭它时),以及当您单击&#34;应用&#34;按钮(在窗口的左下角)。

此功能只是在启动配置中设置了一些属性。其中一个是项目名称(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME)。此属性设置为fProjText.getText()的值,这是下面窗口中的文本框:

Project Field

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

注意: 我没有查看JDT代码,但我认为它是相同的

<强>解决方案

1) 什么都不做,因为它可能是故意这样的(即使我不知道为什么)。 注意: 我认为这个值只有在你修改它时才会出错,所以我认为这就是为什么它写在.launch脚本。

2) 您可以修改Eclipse代码以不使用文本框值,但类似"${project_name}" 注意: 我不建议这样做,因为更新项目以跟踪eclipse更新会更难。

2 bis) 不是重写Eclipse代码,而是扩展CMainTab2类以覆盖performApply()方法,将属性设置为{ {1}}。

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

注意: 我不知道是否存在可以在.launch脚本中调用的"${project_name}"等变量。因此,也许所有这些潜在的解决方案都不可能