2012-02-10 2 views
4

Я создал генератор Xpand. В своей папке src/я определил модель My.nn модели и рабочий процесс.Как решить ERROR Mwe2Launcher: Не удалось найти EClass для имени

Это как мой файл workflow.mwe2 выглядит следующим образом:

module workflow.NeuralNetworksGenerator 

import org.eclipse.emf.mwe.utils.* 

var targetDir = "src-gen" 
var fileEncoding = "Cp1252" 
var modelPath = "src/model" 

Workflow { 
    component = org.eclipse.xtext.mwe.Reader { 
     // lookup all resources on the classpath 
     //useJavaClassPath = true 

     // or define search scope explicitly 
     path = modelPath 

     // this class will be generated by the xtext generator 
     register = org.xtext.example.neuralnetworks.NeuralNetworksStandaloneSetup {} 
     load = { 
      slot = "systems" 
      type = "System" 
     } 
    } 

    component = org.eclipse.xpand2.Generator { 
     expand = "templates::Template::main FOREACH systems" 
     outlet = { 
      path = targetDir 
     } 
     fileEncoding = fileEncoding 
    } 
} 

Когда я пытаюсь запустить этот файл как workflow.mwe2 MWE2 Workflow, я получаю следующие ошибки:

0 INFO AbstractExpressionsUsingWorkflowComponent - No meta models configured, using JavaBeans as default. 
75 ERROR Mwe2Launcher  - Problems running workflow workflow.NeuralNetworksGenerator: Couldn't find EClass for name 'System'. 
java.lang.RuntimeException: Problems running workflow workflow.NeuralNetworksGenerator: Couldn't find EClass for name 'System'. 
    at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:99) 
    at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:73) 
    at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:64) 
    at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:55) 
    at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.run(Mwe2Launcher.java:74) 
    at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.main(Mwe2Launcher.java:35) 
Caused by: org.eclipse.emf.mwe.core.WorkflowInterruptedException: Couldn't find EClass for name 'System'. 
    at org.eclipse.xtext.mwe.SlotEntry.findEClasses(SlotEntry.java:135) 
    at org.eclipse.xtext.mwe.SlotEntry.put(SlotEntry.java:91) 
    at org.eclipse.xtext.mwe.AbstractReader.addModelElementsToContext(AbstractReader.java:95) 
    at org.eclipse.xtext.mwe.Reader.invokeInternal(Reader.java:166) 
    at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:126) 
    at org.eclipse.emf.mwe.core.lib.Mwe2Bridge.invoke(Mwe2Bridge.java:34) 
    at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:201) 
    at org.eclipse.emf.mwe2.runtime.workflow.AbstractCompositeWorkflowComponent.invoke(AbstractCompositeWorkflowComponent.java:35) 
    at org.eclipse.emf.mwe2.runtime.workflow.Workflow.run(Workflow.java:19) 
    at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:97) 
    ... 5 more 

Пример, который я использовал для создания моего специализированного файла mwe2 рабочего процесса, взят из справочного руководства Xpand.

Это список зависимостей подключаемых модулей из файла MANIFEST.MF:

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: my.neuralnetworks.generator.project 
Bundle-SymbolicName: my.neuralnetworks.generator.project; singleton:=true 
Bundle-Version: 1.0.0 
Require-Bundle: org.eclipse.jdt.core;bundle-version="3.5.0", 
org.eclipse.xtend.profiler;resolution:=optional, 
org.apache.commons.logging, 
org.apache.log4j;resolution:=optional, 
com.ibm.icu;bundle-version="4.0.1", 
org.antlr.runtime;bundle-version="3.0.0", 
org.eclipse.core.runtime;bundle-version="3.5.0", 
org.eclipse.emf.mwe.utils;bundle-version="0.7.0", 
org.eclipse.emf.ecore.xmi;bundle-version="2.5.0", 
org.eclipse.jface.text;bundle-version="3.5.0", 
org.eclipse.xpand;bundle-version="0.7.0", 
org.eclipse.xtend;bundle-version="0.7.0", 
org.eclipse.xtend.typesystem.emf;bundle-version="0.7.0", 
org.eclipse.xtend.backend;bundle-version="1.0.0";resolution:=optional, 
org.eclipse.xtend.middleend.xpand;bundle-version="1.0.0";resolution:=optional, 
org.eclipse.xtend.middleend.xtend;bundle-version="1.0.0";resolution:=optional, 
neuralnetworks;bundle-version="1.0.0", 
org.xtext.example.neuralnetworks;bundle-version="1.0.0", 
org.eclipse.emf.ecore.xmi.source;bundle-version="2.7.0", 
org.eclipse.jface.text.source;bundle-version="3.7.0", 
org.antlr.runtime.source;bundle-version="3.2.0", 
org.antlr.runtime_3.1.b1;bundle-version="3.1.0", 
com.ibm.icu.source;bundle-version="4.4.2", 
org.eclipse.jdt.core.source;bundle-version="3.7.0", 
org.eclipse.emf.mwe2.launch;bundle-version="2.2.0" 
Bundle-RequiredExecutionEnvironment: J2SE-1.5 
Import-Package: nn 

neuralnetworks плагин относится к моему ГМП проекта для моего графического редактора, где находится метамодель и org.xtext.example.neuralnetworks соответствует моему текстовому редактору.

Файл ecore, соответствующий файлу emf, имеет в нем систему EClass.

ответ

0

Как выглядит ваш dsl? Имеет ли он класс EClass с именем System? Обновление: только что у вас нет метамодели на основе Xtext. Поэтому, если вы хотите использовать компонент Xtext Mwe Reader, вы должны использовать AbstractGenericResourceSupport и зарегистрировать свой epackage, а также он описан в этом примере Xtend2. http://christiandietrich.wordpress.com/2011/07/29/xtend2-code-generators-with-non-xtext-models/

+0

Мой xtext-файл был создан автоматически, поскольку проект xtext был создан из существующей модели Ecore. В xtext-файле есть определение синтаксиса для элемента «System». Из вашего учебника я понимаю, что я должен изменить автоматически сгенерированные файлы в этом проекте xtext, то есть файлы, относящиеся к моим классам «StandaloneSetup» и «RuntimeModule». Однако они уже расширяют «NeuralNetworksStandaloneSetupGenerated» и «org.xtext.example.neuralnetworks.AbstractNeuralNetworksRuntimeModule» соответственно. Должен ли я изменить их? – deedee

0

Нет, но поскольку вы используете существующую метамодель, а не производную вы должны добавить следующее к началу своего рабочего процесса.

bean = StandaloneSetup { 
    registerGeneratedEPackage = "sample.SamplePackage" 
} 
Смежные вопросы