如何在使用速度模板创建动态 class 时修复 "class not found exception"

How to fix "class not found exception" while creating dynamic class using velocity template

我使用速度模板创建了一个 class 模板,并将动态变量传递给它。它确实为我创建了一个 class,但是当我尝试加载那个 class 时,它显示 "class not found exception" 因为 class 不存在于 class 路径中。有什么解决方案可以让我加载这个 class?

MainClass.vm //class

的模板
public class $className
{
public static void main (String[] args ){

  System.out.println("Hello $name");
}

}

HelloWorld.java
public class HelloWorld {

    public static void main(String[] args) {
        String className = "MainClass";
        try{
         /*  first, get and initialize an engine  */
        VelocityEngine ve = new VelocityEngine();
        ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
        ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());
        ve.init();
        /*  next, get the Template  */
        Template t = ve.getTemplate( "MainClass.vm" );
        /*  create a context and add data */
        VelocityContext context = new VelocityContext();
        context.put("className", className);
        context.put("name", "World");
        /* now render the template into a StringWriter */
        FileWriter fileWriter = new FileWriter(className + ".java");
        t.merge(context, fileWriter);
        Class.forName("MainClass");
        fileWriter.flush();
    }
        catch(Exception exception)
        {
            System.err.println(exception);
        }
}
}

您生成的是一个 .java 源文件。 Java 需要 .class 个编译文件。

因此,无论如何,您都需要编译生成的 class。而如何做取决于您的环境、您的构建系统和您的需求。它可以归结为从您的构建脚本调用 javac,或者以编程方式编译然后加载 class,如 this question.

中所述