Я имею дело с хранилищем модулей 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 (и не может быть изменена), если это актуально.
Изучение :
Глядя на код CDT, этот атрибут установлен только в одном месте. Это в пакете org.eclipse.cdt.launch.ui
в классе CMainTab2
(для CDT версии более 7.3, в противном случае CMainTab
), в строке 344, в функции performApply()
,
Этот класс определяет вкладку «main» в окне пользовательского интерфейса, используемую для настройки конфигурации запуска (или конфигурации отладки). Как показано на рисунке ниже:
Функция performApply()
вызывается каждый раз, когда вы обновляете эту вкладку (например, когда вы открываете или закрываете ее), и когда вы нажимаете кнопку «Применить» (в левом нижнем углу окна).
Эта функция просто устанавливает некоторый атрибут в конфигурации запуска. Одним из них является название проекта (ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME
). Для этого атрибута установлено значение fProjText.getText()
, которое является текстовым полем в окне, показанном ниже:
Это текстовое поле заполняется автоматически при создании конфигурации запуска (или конфигурации отладки) с именем последнего созданного проекта.
Замечания: Я не смотрел на код JDT, но я думаю, что это то же самое
Решения
1) Ничего не меняйте, потому что это может быть намеренно так (даже если я не знаю почему). Замечания: Я думаю, что это значение может быть неправильным, только если вы измените его, поэтому я думаю, что это трудно записать в .launch
скрипт.
2) Вы можете изменить код Eclipse, чтобы не использовать значение текстового поля, а что-то вроде "${project_name}"
, Замечания: Я не рекомендую это, потому что будет сложнее обновить ваш проект, чтобы следовать обновлениям затмения.
2 бис) Вместо того, чтобы переписывать код Eclipse, расширьте CMainTab2
класс для переопределения performApply()
метод для установки атрибута "${project_name}"
,
3) Не изменяйте код, и каждый раз, когда вы создаете конфигурацию запуска (запуск или отладку), изменяйте значение текстового поля на $ {имя_проекта}. (Но это будет трудоемким повторять это каждый раз)
Замечания : Я не знаю, существует ли такая переменная, как project_name
что вы можете вызвать в .launch script. Так что, возможно, все эти потенциальные решения не возможны
Других решений пока нет …