2014-10-07 21 views
0

我有一个Acceleo项目(一堆* .mtl文件和一个可以使用这些模板生成输出的Java类)。该项目只要我在Eclipse中运行它工作正常,但是当我编译使用Maven的* .emtl文件,我得到一个NullPointerException内AcceleoService#doGenerate()运行Acceleo生成器的NPE

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触发,这看起来像是一个可能的原因,但这是我设法来的。

任何想法可能是错误的吗?

回答

0

当您运行Acceleo standalone时,您必须为它提供该插件为您运行的所有库/ jar和类。另外,如果你想将它导出到jar,你也必须提供Eclipse的库。

我建议你编译并使用maven/ant(我使用过maven)来生成jar,因为你将不得不打包几个库,它使得它更容易。

jar的列表(你可以从你的插件文件夹中采取几乎所有的人在你的Eclipse):

enter image description here

也许你可能要包括一些为你的POM的依赖,在命令maven能够将它们包含在你的最终jar中。

最后,您必须配置您的插件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正如你所看到的,我有进口的东西,但他们会为你肯定没用。

我希望我能帮助你!