[英]Is there a way to generate build.gradle file from Java programmatically
[英]Is there any way to programmatically generate java class from a template?
我需要一個庫或方法來從模板文本文件生成一個java類(只是生成類的源代碼作為文本格式,不需要運行或使用它)。
作為一個例子,我有一個類模板
package packagename.name.abc;
import lib.sub.sub;
import lib.sub.sub2;
public class templateClass {
public String getTemplateText() {
//some operations here.
}
PlaceController getPlaceController() {
//some operations here.
}
}
我想在模板中添加庫導入,函數導入和參數或行添加,並將模板添加到項目中。 //營運
導入操作后,代碼將如下:
package packagename.name.abc;
import lib.sub.sub;
import lib.sub.sub2;
import NEWLIB.NEWSUB.NEWSUB; // NEW LIBRARY
public class templateClass {
public String getTemplateText(String PARAMETER ) { // NEW PARAMETER
//some operations here.
String NEW_LINE = ""; // NEW LINE
}
PlaceController getPlaceController() {
//some operations here.
}
public String getNEWText() { //NEW FUNCTION
//some operations here.
}
}
我搜索了一些庫以進行此操作FreeMarker和ApacheVelocity被推薦用於一些類似的問題。 但我並不完全理解如何使用FreeMarker進行此操作。 我認為它很可能用作標記庫(如JSTL)我不想在代碼中使用模板關鍵字(如$(temp))只是函數“doImport”,“addFunction”,“addParameterToFunction”等等。是嗎可以使用這個庫,或者任何人都可以發送一些有關此操作的示例?
這會有幫助嗎? - JET模板
實際上,您希望以任意方式修改任意代碼段。
要以一般方式執行此操作,您幾乎需要能夠解析文本,以便您可以將結構放置在適當的結構化位置。 通常使用的模板只是文本; 沒有結構掛你的帽子。
最可靠的方法是使用源到源程序轉換系統。 這樣的工具允許您明確說明,“如果你看到這個,那就用它替換它”。 為了實現你的目的,你會說,“如果你在類X中看到一組類聲明,那么添加這個類”,通常表示為
a rewritesto b if condition c
DMS軟件重新設計工具包是一個程序轉換工具,它將讀取源代碼,構建編譯器數據結構(AST,符號表,流程圖),允許您將源到源重寫應用於表示為這些結構的代碼,使用源代碼匹配/替換的模式,然后從結果中重新生成有效的源。
DMS有許多語言的解析器/ prettyprinters,包括Java(1.4 / 1.5 / 1.6),C,C ++,C#,COBOL,PHP,JavaScript,......
對於add-a-parameter任務,使用DMS可以編寫以下轉換規則:
add_string_parameter(r:result_type,m:IDENTIFIER,p:parameter_list):
method_signature->method_signature
= " \r \m ( \p ) " -> " \r \m ( \p , String PARAMETER ) " if m="getTemplateText";
( - >對應於“rewritesto”)這個只能識別方法簽名(通過搜索AST,而不是原始文本)。 引號是包含目標語言片段的元引號 ,需要區分目標語言文本和規則語言文本。 r,m,p是在給定規則的簽名時必須與特定結構匹配的元變量; \\ r \\ m \\ p是目標文本中的元轉義,表示必須存在這些結構。 左側“\\ r \\ m(\\ p)”匹配簽名並將r,m,p綁定到AST結構支持它; 右側指定替換,其中r,m,p的邊界值被替代以獲得替換。 條件“if”是堅持只有所需的方法被修改; 如果您有大量代碼並想要只使用其中的特定方法,則可能需要更復雜的條件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.