我正在处理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(并且无法更改)。
答案 0 :(得分:1)
调查:
查看CDT代码,此属性仅在一个位置设置。它位于CMainTab2
类org.eclipse.cdt.launch.ui
中(对于CDT版本超过7.3,否则它在CMainTab
中),在第344行,在函数中performApply()
。
此类定义名为&#34; main&#34;的选项卡。在用于配置运行配置(或调试配置)的UI窗口中。如下图所示:
每次刷新此选项卡时都会调用函数performApply()
(当您打开或关闭它时),以及当您单击&#34;应用&#34;按钮(在窗口的左下角)。
此功能只是在启动配置中设置了一些属性。其中一个是项目名称(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME
)。此属性设置为fProjText.getText()
的值,这是下面窗口中的文本框:
使用上次构建的项目名称创建运行配置(或调试配置)时,将自动填充此文本框。
注意: 我没有查看JDT代码,但我认为它是相同的
<强>解决方案强>
1) 什么都不做,因为它可能是故意这样的(即使我不知道为什么)。 注意: 我认为这个值只有在你修改它时才会出错,所以我认为这就是为什么它写在.launch
脚本。
2) 您可以修改Eclipse代码以不使用文本框值,但类似"${project_name}"
。 注意: 我不建议这样做,因为更新项目以跟踪eclipse更新会更难。
2 bis) 不是重写Eclipse代码,而是扩展CMainTab2
类以覆盖performApply()
方法,将属性设置为{ {1}}。
3) 不要修改任何代码,每次创建启动配置(运行或调试)时,请将文本框值修改为$ {project_name}。 (但每次重新输入)都很费力
注意: 我不知道是否存在可以在.launch脚本中调用的"${project_name}"
等变量。因此,也许所有这些潜在的解决方案都不可能