2013-09-04 3 views
0

В настоящее время я изучаю Xtext для создания как многоразового DSL, так и артефакта, который построен на DSL. упрощенный макет проекта выглядит следующим образом:Использование артефактов, созданных Xtext

  • Projecta: Содержит XText на основе DSL, функционально-проект, updatesite и т.д.
  • projectB: Использует артефакты Projecta для генерации кода.
  • projectC: Использует сгенерированный код от projectB

Строительство Projecta с использованием Maven и XText не проблема (и есть несколько примеров в сети уже есть), но я не понимаю, как использовать DSL от projectA внутри проектаB и выпустить сгенерированный код для потребления в projectC. Учебники, документация и каждый пример, который я мог найти, используют сгенерированный плагин Eclipse из projectA для генерации кода в projectB. Хотя это прекрасно работает, мне интересно, как использовать сгенерированный код.

Возможно ли использовать только генератор кода из проекта A с Maven или что-то подобное? Как я должен использовать DSL на сервере непрерывной интеграции? Я запустил Eclipse без головы для этого?

Мне кажется, что мне не хватает чего-то очевидного. Поэтому любые указатели, подсказки, примеры приветствуются!

ответ

0

Можно создать код из Xtext, используя бегун Fornax MWE (к сожалению, недоступен в Maven Central, но в http://www.fornax-platform.org/m2/repository).

Мы используем этот подход в EMF-IncQuery (corresponding pom file), основанный на основе Tycho компиляции

1. Настройте чистый плагин опорожнить Src-GEN и папки Xtend-генераторных (от всех связанных с проектов, таких как основные, испытания и Ui проектов) 2. Используйте Fornax плагин для выполнения MWE2 Workflow 3. выполнить компилятор Xtend (некоторый код генерируется в виде классов Xtend)

Дополнительно (в основном хранилище иВерсия компилятора Xtend) добавляется в parent pom нашей сборки.

Обновление: Ответил неправильный вопрос; Прости. Попробуйте другой ответ.

Прежде всего, вы должны реализовать свой язык/компилятор, чтобы быть интегрируемым в безголовой среде (см. Способ компоновки компилятора xtend-maven).

В вашей грамматике уже есть генератор (реализующий интерфейс IGenerator), который получает модель и вспомогательный класс для создания файла. В случае грамматики, использующей Xbase, этот генератор реализуется с помощью Xtext, иначе вы уже должны его реализовать.

Тогда вы можете предоставить дополнительный проект, который использует этот генератор и, следовательно, способен генерировать такой код. В основном, используйте ваши языки StandaloneSetup/headless инжектор, чтобы получить экземпляр IGenerator (в новом проекте) и добавить новый экземпляр FileSystemAccess, который параметризован в соответствии с вашей сборкой.

Тогда ваш проект должен ссылаться на исходный проект - например,он также может быть подключаемым проектом, строить его с помощью Tycho, а затем использовать его как компилятор на основе jar; или вы можете создать чистый плагин Maven, но в этом случае вам может потребоваться вручную выбрать транзитивные зависимости, необходимые для Xtext.

В случае плагина xtend-maven-compiler это решается путем создания «uberjar» путем копирования всех зависимостей в один файл jar, а затем это относится. Уродливо, но это работает.

+0

Разве эта конфигурация не используется для «projectA» в моем примере? Например. конвертировать MyDSL.xtext и GenerateMyDSL.mwe2 во что-то, что будет использоваться «projectB»? Как я могу преобразовать Something.mydsl внутри 'projectB' в Java и упаковать его в .jar? – user2746387

+0

Извините; плохой ответ. Переписал весь мой ответ. –

+0

Большое спасибо за отличные советы. – user2746387

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