2015-07-21 52 views
0

我想從一個安裝的插件運行Acceleo項目,動態Acceleo項目插件

即我寫了使用Acceleo一個插件,我想它從一個項目,是在工作區中運行Acceleo模板。

目前,我有我從我的Eclipse插件程序運行Acceleo項目:

try { 
final File outputDir = new File("C:/outputDir/"); 
List<String> arguments = new ArrayList<String>(); 
/*fc is an instance of a EMF Compare Comparison object 
* the nsURI for it is http://www.eclipse.org/emf/compare 
*/ 
Generate generator = new Generate(fc, outputDir, arguments);         
      generator.doGenerate(new BasicMonitor()); 
} catch (IOException e) { 
e.printStackTrace(); 
} 

模板是目前簡單:

[comment encoding = UTF-8 /] 
[module generate('http://www.eclipse.org/emf/compare')] 
[template public generateElement(comparison : Comparison)] 
[comment @main/] 
[file ('update.sql', false, 'UTF-8')] 
/*SQL UPDATE SCRIPT TEST*/ 
[comparison.getDifferences().toString() /] 
[/file] 
[/template] 

這完全產生。

問題是我需要部署插件,但我仍然需要最終用戶能夠修改模板。最終目標是在最終用戶的工作區中加入Acceleo項目,並讓我的插件在運行時調用它,但無論如何設置,我都必須將Acceleo項目包含在我的插件功能中。

事情我已經嘗試:

  • 從最終用戶的工作空間
  • 與Java類加載器的各種嘗試(我覺得這是要走的路項目重寫Acceleo模塊,但我不能似乎得到一個工作示例)

我運行:

  • 的Eclipse露娜SR2(4.4 0.2)
  • 的Windows 7專業版 - 64bitSP1
  • Acceleo3.5.1.201409021433
  • JRE 1.8.0_45

回答

0

你正在嘗試實現可能是錯誤的定義。 Acceleo將模板編譯爲Java代碼並從中創建可執行類。 如果您希望最終用戶修改模板,那麼他們需要事後編譯代碼,即他們需要構建基礎結構。

我建議你參數化SQL查詢並編譯模板。您可以創建一個公開函數「getSQL ...()」的實用程序Java類,並從您的模板中調用它。 此實用程序類可以根據您的需要從.properties或其他源讀取SQL。

然後,編譯併發布您的二進制加速項目,並教導用戶在運行時需要配置什麼。

0

我這樣做:「從生成的結構中獲取參數數據並將其視爲輸入數據」。換句話說,你可以通過你的模型傳遞數據:

模型是你的輸入,所以如果你想有一個編譯和可配置的Acceleo插件,你應該在你的入口模型上有一個「配置元素」(如果你正在使用UML,它可以是一個「配置類」),在這種情況下,您將能夠進行「blackbox m2t轉換」以及一些可以從中做出決定的信息(通過入口模型)。您可以從之前的m2m轉換中添加這些元素(使用默認值)。如果你知道一些「eclipse rcp」,也許你可以創建這個配置元素並以編程方式將它添加到你的入口模型(作爲文本),然後運行你的「有爭議的轉換」,否則你可以讓用戶去完成任務手動。也許這個解決方案並不能解決所有問題,但基於此,至少可以爲最終用戶提供各種轉換選項。

寫這個答案之後,我發現這個有趣的,也許比我更好的建議:Acceleo M2T - Write timestamp into a generated file