2017-04-09 209 views
0

我正在使用Velocity在我的項目中生成不同的工件,包括Java Hibernate Entities。如何使用Apache Velocity 1.7保留模板空白(製表符)格式?

這裏是我的模板的一個例子:

#foreach($column in $columns) 
    #if ($column.columnID != "id") 
     #if ($column.isColumnAnIdentifier) 
@Id 
     #end 
     #if ($column.isColumnValueGenerated) 
@GeneratedValue 
     #end 
     #if ($column.isColumnValueNotNull) 
@NotNull 
     #end 
     #if ($column.columnAllowedValues) 
@Enumerated(EnumType.STRING)   
     #end 
     #if ($column.isColumnValueUnique) 
@Column(unique=true) 
     #elseif ($column.isColumnJoinedManyToOne) 
@ManyToOne 
@JoinColumn(name = "$column.columnJoinByID") 
     #else 
@Column 
     #end 
private #if ($column.columnAllowedValues) $column.columnID.toUpperCase() #else $column.columnType #end $column.columnID; 
    #end 
#end 

的問題是,生成的代碼看起來是這樣的:

@Column 
      private String vendor; 

                 @NotNull 
            @Column(unique=true) 
      private String name; 


@Column 
      private Integer min_quantity; 


@Column 
      private String description; 


@Column 
      private Boolean active; 

我嘗試了建議的解決方案與每一行後增加##,它沒有幫助。有沒有辦法強制Velocity保持模板中定義的空格?

VelocityEngine velocityEngine = new VelocityEngine(); 
    velocityEngine.setProperty(RESOURCE_LOADER_PROPERTY, RESOURCE_LOADER_VALUE); 
    velocityEngine.setProperty(CLASSPATH_RESOURCE_LOADER_PROPERTY, ClasspathResourceLoader.class.getName()); 
    velocityEngine.init(); 
    Template velocityTemplate = velocityEngine.getTemplate(TEMPLATE_RESOURCES_ROOT_FOLDER + "/" + templateFileName);; 
    StringWriter writer = new StringWriter(); 
    velocityTemplate.merge(velocityContext, writer); 
    writeToFile(writer, destinationFilePath); 

回答

0

##在線路末端是不夠的,還需要去除速度壓痕。

的替代,以保持縮進,以速度評論縮進:

#foreach($column in $columns)## 
#**##if ($column.columnID != "id")## 
#* *##if ($column.isColumnAnIdentifier)## 
@Id 
#* *##end 
#* *##if ($column.isColumnValueGenerated)## 
... 

,但我承認它是相當難看。

即將推出的Velocity 2.0版本增加了一個space gobbling option,默認情況下處於活動狀態,並且完全符合您的需求。最新候選版本可用here