2015-07-21 6 views
0

Я хочу запустить проект Acceleo из Installed Plugin,Dynamic Acceleo Project Плагин

то я написал плагин, который использует Acceleo и я хочу, чтобы запустить шаблон Acceleo из проекта, который находится в рабочей области.

В настоящее время у меня есть проект Acceleo который я бегу из моего Eclipse Plugin программно:

try { 
final File outputDir = new File("C:/outputDir/"); 
List<String> arguments = new ArrayList<String>(); 
/*fc is an instance of a EMF Compare Comparison object 
* the nsURI for it is http://www.eclipse.org/emf/compare 
*/ 
Generate generator = new Generate(fc, outputDir, arguments);         
      generator.doGenerate(new BasicMonitor()); 
} catch (IOException e) { 
e.printStackTrace(); 
} 

Шаблон прост в данный момент:

[comment encoding = UTF-8 /] 
[module generate('http://www.eclipse.org/emf/compare')] 
[template public generateElement(comparison : Comparison)] 
[comment @main/] 
[file ('update.sql', false, 'UTF-8')] 
/*SQL UPDATE SCRIPT TEST*/ 
[comparison.getDifferences().toString() /] 
[/file] 
[/template] 

Это создает совершенно.

Проблема в том, что мне нужно развернуть плагин, но мне все еще нужны конечные пользователи, чтобы иметь возможность изменять шаблоны. Конечной целью является проект Acceleo в рабочем пространстве конечных пользователей и позволить моему плагину вызывать его во время выполнения, но независимо от того, как я его настроил, я должен включить проект Acceleo в свою функцию плагина.

Вещи я покушений:

  • Переопределение модуль Acceleo из проекта в конечных пользователей рабочее пространство
  • Различные попытки с Java загрузчиков классов (я считаю, что это путь, но я не могу похоже, чтобы получить рабочий пример)

Я бегу:

  • Затмения Luna SR2 (4.4 0,2)
  • Windows 7 Pro - 64bitSP1
  • Acceleo3.5.1.201409021433
  • JRE 1.8.0_45

ответ

0

То, что вы пытаетесь достичь, вероятно, определена неправильно. Acceleo компилирует шаблоны в код Java и создает из них исполняемые классы. Если вы хотите, чтобы ваши конечные пользователи изменяли шаблоны, тогда им необходимо будет скомпилировать код, т. Е. Им понадобится инфраструктура построения.

Я бы предложил вам параметризовать SQL-запросы и скомпилировать шаблоны. Вы можете создать утилиту Java-класса, предоставляющую функцию «getSQL ...()» и вызывать ее из вашего шаблона. Этот класс утилиты может читать SQL из .properties или другого источника, как вам угодно.

Затем вы компилируете и выпускаете свой двоичный проект acceleo и учите пользователей, что им нужно настроить во время выполнения.

0

Я делаю так: «принимая данные аргумента из сгенерированной структуры и рассматривая ее как входные данные». Другими словами, вы можете передавать данные через ваши модели:

Модель - это ваш вход, поэтому, если вы хотите иметь скомпилированный и настраиваемый плагин Acceleo, у вас должен быть «элемент конфигурации» на вашей модели входа (если вы используют UML, он может быть «классом конфигурации»), в этом случае вы сможете преобразовать «blackbox m2t», а также некоторую информацию (через вашу модель входа), из которой вы можете принимать решения. Вы можете добавить эти элементы (со значениями по умолчанию) из предыдущего преобразования m2m.Если вы знаете немного «eclipse rcp», возможно, вы можете создать этот элемент конфигурации и программно добавить его в свою модель входа (как текст), а затем запустить «аргументированное преобразование», иначе вы можете просто попросить пользователя выполнить задачу вручную. Возможно, это решение не решит все ваши проблемы, но на основе этого вы, по крайней мере, можете предоставить конечным пользователям различные варианты трансформации.

После написания этого ответа, я нахожу это интересным и, возможно, лучше, чем мое предложение: Acceleo M2T - Write timestamp into a generated file