2014-07-18 46 views
1

我從兩個相關元模型開始生成代碼。主要的一個引用了第二個類的類。當作爲Acceleo插件執行時,Acceleo執行效果良好,但在作爲Java應用程序執行時不會執行。如果我啓動Java主類,則第二個相關元模型的數據不可見。Acceleo - 使用Java應用程序交叉模型參考

我得到的錯誤是

org.eclipse.acceleo.engine.AcceleoEvaluationException: Unresolved compilation error in generation module 

我告訴你調試模式的一個片段。 目標是第二個元模型(名爲peersbehavior)的類的引用。

---- URI是正確的,它指向的確切位置---- exact URI

----但沒有檢索到的值----

empty object

我有ATL Model2Model轉換的類似問題:必須選中「允許模型間參考」選項。但在Acceleo我沒有找到類似的

[編輯] 什麼正如指出的standalone documentation

我在Java類添加了這些2行的代碼現在

public void registerResourceFactories(ResourceSet resourceSet) 
     { 
     super.registerResourceFactories(resourceSet); 
     // code added by me 

     resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("systembehavior", new XMIResourceFactoryImpl()); 
     resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("peerbehavior", new XMIResourceFactoryImpl()); 
     } 

它的工作也已經開始Java類,但如果我將項目導出爲Jar,並嘗試在另一個項目中使用它,我有和以前一樣的問題

回答

0

我解決了添加此代碼的問題(如[編輯]部分我的問題)

public void registerResourceFactories(ResourceSet resourceSet) 
     { 
     super.registerResourceFactories(resourceSet); 
     // code added by me 

     resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("systembehavior", new XMIResourceFactoryImpl()); 
     resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("peerbehavior", new XMIResourceFactoryImpl()); 
     } 

手動添加.emtl編譯的文件,在src DIR(否則他們不會在該.jar插入)。

通過這些修改,代碼生成工作如果作爲Java應用程序執行。作爲Acceleo應用程序運行轉換不起作用