2010-09-16 2 views
1

Я работаю над грамматикой (проект Xtext), где я хочу повторно использовать типы OCL. Обычно вы ссылаетесь в Xtext на существующие типы с оператором импорта, например.Проблема интеграции типов OCL в грамматике Xtext

import "http://www.eclipse.org/emf/2002/Ecore" as ecore 

Уже существует пример проекта Xtext (CompleteOCL), который объединяет типы OCL в грамматике. К сожалению, проект ссылается в своих операциях импорта на локальные плагины, например.

import "platform:/resource/org.eclipse.ocl.examples.xtext.base/model/BaseCST.ecore" as base 

Таким образом, нет никаких зависимостей, определенных в файле Manifest.MF. Если я хочу, чтобы повторно использовать типы OCL в моей грамматике я должен написать, например

import "http://www.eclipse.org/ocl/3.0.0/BaseCST" as base 

Я добавил зависимость org.eclipse.ocl.examples.xtext.base и могу писать правила в моих грамматиках, которые относятся к (OCL) BaseCST. Если я пытаюсь генерировать artifcats XText я получаю следующее сообщение об ошибке:

 ... 3 more 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.eclipse.emf.mwe2.language.factory.SettingProviderImpl$1$1.setValue(SettingProviderImpl.java:54) 
    ... 36 more 
Caused by: java.lang.IllegalStateException: Problem parsing 'classpath:/org/xtext/example/mydsl/MyDsl.xtext':[XtextLinkingDiagnostic: null:5 Couldn't resolve reference to EPackage 'http://www.eclipse.org/ocl/3.0.0/BaseCST'.] 
    at org.eclipse.xtext.generator.LanguageConfig.setUri(LanguageConfig.java:112) 
    ... 41 more 

Так что, вероятно, что-то I'missing? Проблема довольно легко воспроизвести. Создайте новый проект Xtext, добавьте зависимость, отредактируйте грамматику и добавьте последний оператор импорта («import» http: // ... ») и попытайтесь создать артефакты Xtext. Любые идеи приветствуются!

Спасибо заранее
Майкл

EDIT: для того, чтобы использовать грамматику, вы должны обратиться в вашем MWE2 рабочий процесс (смотри раздел 3.2.2.2 в документации XText (версия 1.0.1)) к соответствующему genmodel файла модель экологии, например

fragment = org.eclipse.xtext.generator.ecore.EcoreGeneratorFragement { 
    referencedGenModels = "platform:/plugins/org.eclipse.ocl.examples.xtext.base/model/BaseCST.genmodel 
} 

Тем не менее, она по-прежнему не работает для меня.

+0

В зависимости от того, что вам нужно, может быть, Проверка языка может быть полезным для вас. –

ответ

0

Является ли проектом CompleteOCL частью рабочего пространства Eclipse, содержащего ваш проект Xtext? Если это так, вы можете попробовать ссылаться на файл Ecore с использованием платформы URI вы упомянули:

import "platform:/resource/org.eclipse.ocl.examples.xtext.base/model/BaseCST.ecore" as base 

вместо

import "http://www.eclipse.org/ocl/3.0.0/BaseCST" as base 

Если пакеты проекта CompleteOCL являются частью вашей Затмения целевой платформы (например, часть ваша установка Eclipse), то

Couldn't resolve reference to EPackage 'http://www.eclipse.org/ocl/3.0.0/BaseCST' 

ошибка imho указывает, что пакет, обеспечивающий этот EPackage, не активирован.

+0

Привет, Фрэнк, проект не является частью моего проектного пространства затмения.Я взял исходные банки соответствующих пакетов и попытался добавить их вручную в мое рабочее пространство (проекты импорта и т. Д.), Но это ничего не изменило. Как проверить, активирован ли пакет? Заранее спасибо! – 2010-09-28 10:51:17

+0

Чтобы проверить, активирован ли комплект, перейдите в меню «Справка»> «Об Eclipse»> «Сведения об установке»> вкладка «Плагины» и проверьте, включен ли подключаемый модуль/пакет, содержащий файл модели Ecore. –

+0

Вот еще один способ проверить, активирован ли пакет: вы также можете запустить Eclipse с включенной консолью OSGi (добавив «-console» к вашей команде запуска eclipse), а затем используйте команду консоли ss OSGi, чтобы получить список (и состояние активации) доступных пакетов. Используя консоль, вы также можете заставить пучок активироваться (используя команду «start»). –

0

Ваш лучший снимок должен состоять в том, чтобы установить эту грамматику в пределах вашего затмения. Импортируйте проект CompleteOCL. Затем щелкните правой кнопкой мыши на нем> экспорт> развертываемые плагины и фрагменты> проверьте проект CompleteOCL> и нажмите кнопку «установить» на хосте. Нажмите «Готово» и перезапустите Eclipse.

Теперь ваши должны быть в состоянии сделать свой импорт в import "http://www.eclipse.org/ocl/3.0.0/BaseCST" as base

С уважением,

Xavier

Смежные вопросы