2013-04-11 45 views
1

看起來好像我在問一個以前已經問過的問題,但其他論壇帖子中指出的解決方案對我來說並不適用。Acceleo獨立 - 第一個參數是代理

我想在獨立運行Acceleo項目。

public void registerPackages(ResourceSet resourceSet) { 
    super.registerPackages(resourceSet); 

    if(!isInWorkspace(PSMAndroid.PSMAndroidPackage.class)){ 
     System.out.println("uri: "+PSMAndroid.PSMAndroidPackage.eNS_URI); 
      resourceSet.getPackageRegistry().put(PSMAndroid.PSMAndroidPackage.eNS_URI, PSMAndroid.PSMAndroidPackage.eINSTANCE); 
    } 
} 

而且也:

public void registerResourceFactories(ResourceSet resourceSet) { 
    super.registerResourceFactories(resourceSet); 
    resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("psmandroid",new XMIResourceFactoryImpl()); 

}

模塊看起來是這樣的:

[module componentModule('org.colpaert.mathias.PSMAndroid')] 

我收到以下錯誤:

org.eclipse.acceleo.engine.AcceleoEvaluationException: The type of the first parameter of the main template named 'generateModel' is a proxy.

我看了其他帖子,但沒有一個適合我。 (herehere

生成器在啓動時作爲「加速應用程序」工作,沒有上述代碼行。當我添加行,作爲Java應用程序運行時,我得到上面的錯誤。但是,當我嘗試爲「acceleo應用」再次運行,我得到以下錯誤:

error

所以不工作了。

我該怎麼辦?

額外信息:我在我的加速器生成項目的構建路徑屬性中添加了ecore模型(項目模型爲& genmodel等)作爲項目引用。

回答

2

問題出在我的元模型URI中。元模型是使用ecore定義的,您應該始終在元模型URI前加上「http://」!

我的元模型的名字: org.colpaert.mathias.PSMAndroid,它在我的acceleo模塊導入爲以下幾點:

[module model('org.colpaert.mathias.PSMAndroid')/]

這導致acceleo尋找路徑相對於在元模型到模塊文件。在獨立編譯後,這只是/ bin文件夾。

我改變了我的ecore元模型URI,重新生成genmodel(etc)。接下來我將加速模塊更改爲:

[module model(' http://org.colpaert.mathias.PSMAndroid ')/],

清除了解決方案,重新編譯並運行。

非常感謝StéphaneBégaudeau,他解決了這個here(其法語)