import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;import org.apache.tools.ant.Project;
import org.hibernate.tool.ant.ConfigurationTask;
import org.hibernate.tool.ant.HibernateToolTask;
public class TestHibernateTools {

/**
    * 创建hibernate.cfg.xml
    * 这个方法会生成hibernate.cfg.xml文件
    */
public void createCfgXML(
String showSQL,String dialect, String driverClass,
String url,String username,String password){
try {
Project project = new Project(); //新建ant project
HibernateToolTask hibernateToolTask = new HibernateToolTask(); //新建一个task
hibernateToolTask.setProject(project);//设置task的project
hibernateToolTask.setDestDir(new File("F:/new/Test/src/hbm"));//目标文件的物理地址
   
//先生成properties文件
Properties properties = new Properties();
    properties.setProperty("hibernate.show_sql", showSQL);
    properties.setProperty("hibernate.dialect", dialect);
    properties.setProperty("hibernate.connection.driver_class", driverClass);
properties.setProperty("hibernate.connection.url", url);
properties.setProperty("hibernate.connection.username", username);
properties.setProperty("hibernate.connection.password", password);
properties.store(new FileOutputStream ("F:/new/Test/src/hbm/cfg.properties"), "cfg");//输出cfg.properties文件
   
//加载properties文件
ConfigurationTask cfgTask = hibernateToolTask.createJDBCConfiguration();
cfgTask.setPropertyFile(new File("F:/new/Test/src/hbm/cfg.properties"));
   
//生成hibernate.cfg.xml文件
hibernateToolTask.createHbm2CfgXml();
hibernateToolTask.execute();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
  
}
 
 /**
      * 读取hibernate.cfg.xml
       * 从数据库表结构创建mapping文件
       * 一张表对应一个mapping文件
       */
public void createMappingXML(){
Project project = new Project();
HibernateToolTask hibernateToolTask = new HibernateToolTask();
hibernateToolTask.setProject(project);
hibernateToolTask.setDestDir(new File("F:/new/Test/src/hbm"));//设置映射文件的存放目录
  
//载入hibernate.cfg.xml
ConfigurationTask cfgTask = hibernateToolTask.createJDBCConfiguration();
cfgTask.setConfigurationFile(new File("F:/new/Test/src/hbm/hibernate.cfg.xml"));
  
//生成mapping文件
hibernateToolTask.createHbm2HbmXml();
hibernateToolTask.execute();
}
 
/**
      * 读取hibernate.cfg.xml
      * 从数据库表结构创建POJO类
      * 一张表对应一个pojo类
      */
public void createPOJO(){
Project project = new Project();
HibernateToolTask hibernateToolTask = new HibernateToolTask();
hibernateToolTask.setProject(project);
hibernateToolTask.setDestDir(new File("F:/new/Test/src/hbm"));
  
//载入hibernate.cfg.xml
ConfigurationTask cfgTask = hibernateToolTask.createJDBCConfiguration();
cfgTask.setConfigurationFile(new File    ("F:/new/Test/src/hbm/hibernate.cfg.xml"));
  
//生成pojo类
hibernateToolTask.createHbm2Java();
hibernateToolTask.execute();
}

}
这是一个根据一个记录了数据库信息的properties文件,生成hibernate的映射文件和pojo类,但是每次执行到hibernateToolTask.execute()的时候,它都会报如下的错误:Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/velocity/exception/MethodInvocationException
at org.hibernate.tool.hbm2x.AbstractExporter.setupTemplates(AbstractExporter.java:127)
at org.hibernate.tool.hbm2x.AbstractExporter.start(AbstractExporter.java:88)
at org.hibernate.tool.ant.ExporterTask.execute(ExporterTask.java:39)
at org.hibernate.tool.ant.HibernateToolTask.execute(HibernateToolTask.java:143)
at optimizer.TestHibernateTools.createCfgXML(TestHibernateTools.java:49)
at optimizer.Ant.main(Ant.java:20)我用包分别是:hibernate-3.1.2.jar 
              hibernate-tools-3.1.0-beta2.jar 
              ant-1.7.1.jar
请教,这个是什么原因,万分感激~~能解决这个问题,马上给分~~

解决方案 »

  1.   

    当 Java 虚拟机或 ClassLoader 实例试图在类的定义中加载(作为通常方法调用的一部分或者作为使用 new 表达式创建的新实例的一部分),但无法找到该类的定义时,抛出此异常。 当前执行的类被编译时,所搜索的类定义存在,但无法再找到该定义。 
      

  2.   

    LZ  建议你用MyEclipse辅助生成Hibernate映射文件
      

  3.   

    velocity的JAR没有导入,楼主可能运用到了velocity.........去Apache官网下载最新的velocity的JAR包.....
      

  4.   

    这个是因为你配了manyToOne然后查询的时候没有加载toOne的那个类