我们已经用它来生成java代码:
第一步:
      编写模板
第二步:
      编写引擎
package rt.common.codegen;import java.io.*;
import java.util.*;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.Template;
import org.apache.velocity.io.VelocityWriter;
import org.apache.velocity.runtime.RuntimeInstance;
public class CodeEngine
{
     private VelocityContext context = null ;
     private String javaPath  = null ;
     private String javaFile  = null ;
     private String vmName    = null ;
     protected void error ( String errMsg, final Throwable throwabe) {
          System.out.println (errMsg) ;
          if (throwabe != null) {
              throwabe.printStackTrace() ;
          }     }     public CodeEngine (String vmPath, String vmName, String javaFile) {
        this.javaPath = javaPath ;
        this.vmName   = vmName ;
        this.javaFile = javaFile;        try {
            Velocity.setProperty (Velocity.FILE_RESOURCE_LOADER_PATH,vmPath );
            Velocity.init() ;
            context = new VelocityContext();
        } catch (Exception e) {
            error ("Init Velocity error:", e);
        }
     }     protected void ContextContentLoader(Vector keys, Vector values) {
         for ( int i=0; i < keys.size() ; i++)
             context.put( keys.elementAt(i).toString(),values.elementAt(i) ) ;
     }     protected void SaveToJavaFile() {
       VelocityWriter writer = null ;
          try {
              writer = new VelocityWriter(new FileWriter (javaFile)) ;
              Template template = Velocity.getTemplate(vmName) ;
              template.merge(context,writer) ;
              writer.close() ;
          } catch (Exception e) {
             error ("Save to java file error!",e ) ;
          }
     }
}第三步:
package rt.common.codegen;import java.util.* ;
import java.io.*;public class CodeGen  {
     private String responstoryName = null ;
     private String javaFileName    = null ;
     private String vmPathName      = null ;
     private boolean isQueryObject  = false;     /*   vmpathname maybe changed */
     public static String vmPathName = "D:\\Code Gen\\mytemplate" ;
     public static final String vmFileName = "javaComponentArchetype.vm" ;     public CodeGen (String vmPathName,String responstoryName,String javaFilePath,String javaFileName,boolean isQueryObject) {
          this.vmPathName      = vmPathName ; 
          this.responstoryName = responstoryName ;
          this.javaFileName    = javaFileName ;
          this.isQueryObject   = isQueryObject ;
     }     public CodeGen() {
     }     protected void GenerateJavaFile ( ) {
         Vector vTags    = new Vector() ;
         Vector vVals = new Vector() ;         vTags.add ("ProjectName");
         vTags.add ("Name");
         vTags.add ("ValidatedName");
         vTags.add ("IsQueryComponent");
         vVals.add (responstoryName) ;
         vVals.add (javaFileName) ;
         vVals.add (javaFileName) ;
         vVals.add (String.valueOf(isQueryObject).toUpperCase()) ;         CodeEngine engine = new CodeEngine(vmPathName,vmFileName,javaFilePath + javaFileName+".java") ;
         engine.ContextContentLoader (vTags,vVals) ;
         engine.SaveToJavaFile() ;
     }
     public static void main (String[] args) {
          CodeGen code = new CodeGen ("SampDB1","d:\\","Customer",false);
          code.GenerateJavaFile () ;  // gen code also save to }
}      代码生成    
    

解决方案 »

  1.   

    请教:
    用Ant1.5.1调用Velocity生成java程序。步骤如何?
      

  2.   

    如果使用ant调用Velocity生成java程序要自己写task.
    jakarta里面的一个项目实现了这个功能。Torque.
      

  3.   

    我是刚刚接触到velocity,不知道实际应用中应该如何使用,
    感觉和struts一样都是设计mvc结构的一种方式,
    但不知道他们各自的特点是什么,
    请大家多多指点!谢谢!