zoukankan      html  css  js  c++  java
  • java动态编译运行代码

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.URI;
    import java.util.Arrays;
    import javax.tools.JavaCompiler;
    import javax.tools.JavaFileObject;
    import javax.tools.SimpleJavaFileObject;
    import javax.tools.StandardJavaFileManager;
    import javax.tools.ToolProvider;
    import javax.tools.JavaCompiler.CompilationTask;
    public class CompilerTest {
     public static void main(String[] args) throws Exception {
            String CLASSNAME = "TestClass";
      String source = "public class " + CLASSNAME +" { public static void main(String[] args) {System.out.println(/"Hello World!/");} }";
      JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
      StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
      JavaSourceFromString sourceObject = new JavaSourceFromString(CLASSNAME,source);
      Iterable<? extends JavaFileObject> fileObjects = Arrays.asList(sourceObject);
      CompilationTask task = compiler.getTask(null, fileManager, null, null,null, fileObjects);
      boolean result = task.call();
      if (result) {
       System.out.println("编译成功。");
       Runtime r = Runtime.getRuntime();
       Process p = r.exec("java " + CLASSNAME);
       BufferedReader br = new BufferedReader(new InputStreamReader(p
         .getInputStream()));
       StringBuffer sb = new StringBuffer();
       String inline;
       while (null != (inline = br.readLine())) {
        sb.append(inline).append("/n");
       }
       System.out.println(sb.toString());
      }
     }
    }
    class JavaSourceFromString extends SimpleJavaFileObject {
     final String code;
     JavaSourceFromString(String name, String code) {
      super(URI.create("string:///" + name.replace('.', '/')+ Kind.SOURCE.extension), Kind.SOURCE);
      this.code = code;
     }
     public CharSequence getCharContent(boolean ignoreEncodingErrors) {
      return code;
     }
    }

  • 相关阅读:
    K8S实战(十七)| 通过 StorageClass 实现动态卷供应
    K8S实战(十六)| 持久化存储卷
    K8S实战(十五)| 存储卷概念
    K8S实战(十四)| ConfigMap 对象
    K8S实战(十三)| Secret 对象
    K8S实战(十二)| 为 Ingress 以及后端 Nginx 增加证书
    批量删除git 本地分支、远程分支、tag
    React 页面间传值的个人总结
    搭建一个属于自己的webpack config(-)
    HTTP 2 新特性
  • 原文地址:https://www.cnblogs.com/yangchongxing/p/7642434.html
Copyright © 2011-2022 走看看