NPE с генератором Acceleo

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

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$
        }

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

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

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

<input/>

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

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


person JesperE    schedule 07.10.2014    source источник


Ответы (1)


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

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

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

введите здесь описание изображения

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

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

            <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, но они наверняка будут вам бесполезны.

Надеюсь, я смог вам помочь!

person Juan Aguilar Guisado    schedule 13.11.2014