M2T Xpand с существующей моделью ecore
У меня есть модель ecore MyModel.ecore, для которой я хочу сгенерировать код, используя Xpand. У меня нет кода редактирования или среды выполнения для проекта xpand, я просто хочу создать проект xpand, загрузить MyModel.ecore, создать файл model.xmi с помощью "создать динамический экземпляр" и запустить. Проблема в том, что мой файл рабочего процесса не распознает элементы из моей метамодели. Вот код из моего рабочего процесса:
<?xml version="1.0"?>
<workflow>
<property name="model" value="com.example/src/Application.xmi" />
<property name="src-gen" value="src-gen" />
<!-- set up EMF for standalone execution -->
<bean class="org.eclipse.emf.mwe.utils.StandaloneSetup" >
<platformUri value=".."/>
</bean>
<!-- instantiate metamodel -->
<bean id="mm_emf" class="org.eclipse.xtend.typesystem.emf.EmfRegistryMetaModel"/>
<!-- load model and store it in slot 'model' -->
<component class="org.eclipse.emf.mwe.utils.Reader">
<uri value="platform:/resource/${model}" />
<modelSlot value="model" />
</component>
<!-- check model -->
<component class="org.eclipse.xtend.check.CheckComponent">
<metaModel idRef="mm_emf"/>
<checkFile value="metamodel::Checks" />
<emfAllChildrenSlot value="model" />
</component>
<!-- generate code -->
<component class="org.eclipse.xpand2.Generator">
<metaModel idRef="mm_emf"/>
<expand
value="template::Template::Root FOR Application" />
<outlet path="${src-gen}" >
<postprocessor class="org.eclipse.xpand2.output.JavaBeautifier" />
</outlet>
</component>
Мой файл шаблона:
«IMPORT MyModel»
«DEFINE Root FOR Application»
«FILE "AndroidManifest.xml"»
«ENDFILE»
«EXPAND ProcesaScreens FOREACH Screens»
«ENDDEFINE»
«DEFINE ProcesaScreens FOR Screen»
«FILE this.name +".java"»
«IF (this.metaType.compareTo(StartScreen.metaType) == 0)»
«EXPAND ProcesaStartScreen FOR (StartScreen)this»
«ENDIF»
«ENDFILE»
«ENDDEFINE»
«DEFINE ProcesaStartScreen FOR StartScreen»
«FILE "FilePrueba.java"»
«ENDFILE»
«ENDDEFINE»
И я получаю эту ошибку:
695 INFO CompositeComponent - Читатель: загрузка модели с платформы:/resource/guiamovil.xpand/src/Application.xmi 890 INFO CompositeComponent - CheckComponent: файл (ы) проверки модели слота: метамодель:: Проверки 1329 INFO CompositeComponent - Генератор: создание шаблона::Template::Root FOR Application' => src-gen 1340 ERROR AbstractExpressionsUsingWorkflowComponent - Ошибка в компоненте типа org.eclipse.xpand2.Generator: EvaluationException: Не удалось найти тип или свойство'Application' [59,11] в строке 1 "Приложение" 1340 ERROR WorkflowEngine - рабочий процесс прерван. Причина: не удалось найти тип или свойство "Приложение". 1340 ОШИБКА WorkflowEngine - [ОШИБКА]: Не удалось найти тип или свойство "Приложение" (Элемент: Приложение; Сообщено: Генератор: создание 'template::Template::Root FOR Приложение ' => src-gen) 1341 ОШИБКА WorkflowEngine - [ОШИБКА]: Не удалось найти тип или свойство' Приложение '(Элемент: EXPAND template::Template::Root FOR Application; Сообщается: Generator: generate'template::Template::Root FOR Application' => src-gen)
Я представляю, что-то в рабочем процессе.
Спасибо
1 ответ
Я думаю, что вы должны сначала зарегистрировать свои модели:
<bean class="org.eclipse.emf.mwe.utils.StandaloneSetup" >
<platformUri value=".."/>
<registerGeneratedEPackage value="com.issamux.example"/>
....
//
</bean>
<!-- instantiate metamodel -->
<bean id="mm_emf" class="org.eclipse.xtend.typesystem.emf.EmfRegistryMetaModel"/>
//your code
позвольте мне сейчас, если это решило вашу проблему...