美文网首页
动态编译

动态编译

作者: kanaSki | 来源:发表于2019-07-07 22:29 被阅读0次

动态编译应用场景:
1、做一个浏览器端编写java代码,上传服务器编译和运行的在线评测系统。
2、服务器动态加载某些类文件进行编译。
动态编译的两种做法:
-通过Runtime调用javac,启动新的进程去操作
Runtime run=Runtime.getRuntime();
Process process=run.exec("javac -cp d:/myjava/ HelloWorld");
-通过JavaCompiler动态编译

    public static void main(String[] args) {
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        int result = compiler.run(null, null, null, "d:/myjava/HelloWorld.java");
        System.out.println(result == 0 ? "编译成功" : "编译失败");
    }

run方法:
第一个参数:为java编译器提供参数
第二个参数:得到java编译器的输出信息
第三个参数:接收编译器的错误信息
第四个参数:可变参数(是一个String数组)能传入一个或者多个java源文件。
返回值:0表示编译成功,非0表示编译失败

动态运行方式一:

        Runtime runtime = Runtime.getRuntime();
        Process process = runtime.exec("java -cp d:/myjava HelloWorld");
        InputStream in = process.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String str = "";
        if ((str = br.readLine()) != null) {
            System.out.println(str);
        }

动态运行方式二:

        URL[] urls = {new URL("file:/d:/myjava/")};
        URLClassLoader loader = new URLClassLoader(urls);
        Class c = loader.loadClass("HelloWorld");
        // 数组不转为object类型,编译器会将数组分解传入,相当于参数是invoke(null,"aa","bb"),参数不匹配
        c.getMethod("main", String[].class).invoke(null, (Object) new String[]{});

相关文章

  • 改善Java程序建议17

    建议 17: 慎用动态编译。 关于动态编译的代码: 只要静态编译能做的事情,动态编译就能实现。 动态编译时,需要注...

  • 动态代理反射

    动态代理 分类AspectJ编译-静态编译-AspectJ编译编译器JDK动态代理-接口cglib动态代理-子类(...

  • c++编译跨平台动态库

    window编译动态库 linux编译动态库 makefile文件

  • Java的动态机制---动态编译

    Java的动态机制---动态编译1 作用 客户写代码,动态编译。 服务器动态加载某些类文件 2 两种做法 通过Ru...

  • 动态编译

    动态编译应用场景:1、做一个浏览器端编写java代码,上传服务器编译和运行的在线评测系统。2、服务器动态加载某些类...

  • android JNI 报错:error: undefined

    编译报错 报错原因:jnigraphics库没有动态链接 解决 Cmake编译解决添加动态链接库 jnigraph...

  • workspaces中的子包进行动态编译配置(别名配置)后编译报

    workspaces中的子包进行动态编译配置后,运行报错。 经调查,子包额外需要做 babel 编译后才能动态编译...

  • 10、应用程序的加载流程

    一、编译过程 源文件.h/.m /.cpp -> 预编译 -> 编译 ->汇编 -> 链接(动态库.a/.lib/...

  • C语言编译

    C语言静态动态编译 看看运行效果 gcc -l xxx or -lxxx 可以是libxxx.so 动态编译的库文...

  • 5月6日:gcc编译选项

    一、GCC 动态库处理 ldd XX ###编译通过,但运行时发现不了动态库 image.png编译时...

网友评论

      本文标题:动态编译

      本文链接:https://www.haomeiwen.com/subject/rkyihctx.html