2014-10-07 5 views
0

У меня есть проект Acceleo (куча файлов * .mtl и класс Java, который может генерировать выходные данные с использованием этих шаблонов). Проект работает прекрасно до тех пор, как я запустить его в Eclipse, но когда я скомпилировать * .emtl файлы с помощью Maven я получаю NullPointerException в AcceleoService#doGenerate():NPE работает генератор Acceleo

Thread [ModalContext] (Suspended (exception NullPointerException)) 
    AcceleoService.doGenerate(Module, String, EObject, List<Object>, File, Monitor) line: 565 
    Plugin(AbstractAcceleoGenerator).generate(Monitor) line: 194  
    Plugin(AbstractAcceleoGenerator).doGenerate(Monitor) line: 159 
    Plugin.doGenerate(Monitor) line: 211  
    Plugin.main(String[]) line: 168 
    NewRPCServiceDefinitionWizard.generatePluginXml(IProgressMonitor) line: 450 
    NewRPCServiceDefinitionWizard.generateCode(IProgressMonitor) line: 269 
    NewRPCServiceDefinitionWizard.access$2(NewRPCServiceDefinitionWizard, IProgressMonitor) line: 231 
    NewRPCServiceDefinitionWizard$3$1.runInWorkspace(IProgressMonitor) line: 315  
    NewRPCServiceDefinitionWizard$3.run(IProgressMonitor) line: 321 
    ModalContext$ModalContextThread.run() line: 121 

код в вопросе выглядит следующим образом:

for (Template template : mainTemplates) { 
     // Calls the template with each potential arguments 
     final EClassifier argumentType = template.getParameter().get(0).getType(); 
     // !!! argumentType is null here !!! 
     if (argumentType.eIsProxy()) { 
      throw new AcceleoEvaluationException(AcceleoEngineMessages.getString(
        "AcceleoService.TypeIsProxy", templateName)); //$NON-NLS-1$ 
     } 

So getType()null. Так как это работает в Eclipse, но не тогда, когда здание с Maven, я сравнить при сгенерированных *.emtl файлах и обнаружил, что файл *.emtl, который работает имеет в верхних

<input> 
    <takesTypesFrom href="http://mycompany.com/xyz#/"/> 
</input> 

в то время как один, который не работает имеет

<input/> 

Поскольку NPE был вызван getType(), возвращающим null, это выглядело как возможная причина, но это насколько мне удалось.

Любые идеи относительно того, что может быть неправильным здесь?

ответ

0

Когда вы запускаете автономный Acceleo, вы должны предоставить ему все библиотеки/банки и классы, которые плагин запускает для вас. Кроме того, если вы хотите экспортировать его в банку, вы также должны предоставить библиотеки Eclipse.

Я рекомендую вам скомпилировать и создать банку с maven/ant (я использовал maven), потому что вам придется упаковать несколько библиотек, и это упростит.

Список банок (вы можете взять почти все из папки плагинов в вашем Eclipse):

enter image description here

Может быть, вы, возможно, придется включить некоторые из них в качестве зависимостей в вашем ПОМ, в чтобы maven мог включить их в вашу последнюю банку.

Наконец, вы должны настроить плагин для acceleo как это:

  <configuration> 
       <useBinaryResources>false</useBinaryResources> 
       <usePlatformResourcePath>true</usePlatformResourcePath> 
       <acceleoProject> 
        <root>${project.basedir}</root> 
        <entries> 
         <entry> 
          <input>your/source/package (ordinary: src/main)</input> 
          <output>your/target/package</output> 
         </entry> 
        </entries> 
       </acceleoProject> 
      </configuration> 

Как вы можете видеть, я импортированные вещи, связанные с MoDisco, но они будут, конечно, бесполезно для вас.

Я надеюсь, что смогу вам помочь!

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