Class JavaSourceCompiler

java.lang.Object
org.aoju.bus.core.compiler.JavaSourceCompiler

public class JavaSourceCompiler extends Object
Java 源码编译器 通过此类可以动态编译java源码,并加载到ClassLoader,从而动态获取加载的类 JavaSourceCompiler支持加载的源码类型包括:
  • 源码文件
  • 源码文件源码字符串
使用方法如下:
     ClassLoader classLoader = JavaSourceCompiler.create(null)
         .addSource(FileKit.file("test-compile/b/B.java"))
         .addSource("c.C", FileKit.readUtf8String("test-compile/c/C.java"))
         // 增加编译依赖的类库
         .addLibrary(libFile)
         .compile();
     Class<?> clazz = classLoader.loadClass("c.C");
 
Since:
Java 17+
Author:
Kimi Liu
  • Method Details

    • create

      public static JavaSourceCompiler create(ClassLoader parent)
      创建Java源码编译器
      Parameters:
      parent - 父类加载器
      Returns:
      Java源码编译器
    • addSource

      public JavaSourceCompiler addSource(Resource... resources)
      向编译器中加入待编译的资源 支持 .java, 文件夹, 压缩文件 递归搜索文件夹内的压缩文件和jar包
      Parameters:
      resources - 待编译的资源,支持 .java, 文件夹, 压缩文件 递归搜索文件夹内的压缩文件和jar包
      Returns:
      Java源码编译器
    • addSource

      public JavaSourceCompiler addSource(File... files)
      向编译器中加入待编译的文件 支持 .java, 文件夹, 压缩文件 递归搜索文件夹内的压缩文件和jar包
      Parameters:
      files - 待编译的文件 支持 .java, 文件夹, 压缩文件 递归搜索文件夹内的压缩文件和jar包
      Returns:
      Java源码编译器
    • addSource

      public JavaSourceCompiler addSource(Map<String,String> sourceCodeMap)
      向编译器中加入待编译的源码Map
      Parameters:
      sourceCodeMap - 源码Map key: 类名 value 源码
      Returns:
      Java源码编译器
    • addSource

      public JavaSourceCompiler addSource(String className, String sourceCode)
      向编译器中加入待编译的源码
      Parameters:
      className - 类名
      sourceCode - 源码
      Returns:
      Java文件编译器
    • addLibrary

      public JavaSourceCompiler addLibrary(File... files)
      加入编译Java源码时所需要的jar包,jar包中必须为字节码
      Parameters:
      files - 编译Java源码时所需要的jar包
      Returns:
      Java源码编译器
    • compile

      public ClassLoader compile()
      编译所有文件并返回类加载器
      Returns:
      类加载器