我有一个 Acceleo 项目(一堆 *.mtl 文件和一个可以使用这些模板生成输出的 Java 类)。只要我从 Eclipse 内部运行该项目,它就可以正常工作,但是当我使用 Maven 编译 *.emtl 文件时,我会在里面得到一个 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
,这看起来是一个可能的原因,但这是我设法做到的。
关于这里可能有什么问题的任何想法?