import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
/**
* 动态编译Java代码
*/
public class DynamicCompileTest {
public static void main(String[] args) {
File file = null;
String classname = null;
try {
String classDir = System.getProperty("user.dir");
file = File.createTempFile("RunTime", ".java", new File(classDir));
String filename = file.getName();
classname = filename.substring(0, filename.lastIndexOf('.'));
PrintWriter out = new PrintWriter(new FileOutputStream(file));
// 代码
String code = "public class " + classname + " {"
+ "public void run() {"
+ "System.out.println(\"DynamicCompile Success.\");" + "}}";
out.println(code);
out.flush();
out.close();
// 编译
String[] arg = new String[] { "-d", classDir, filename };
com.sun.tools.javac.Main.compile(arg);// JAVA_HOME/jdk/lib/tools.jar
URL url = new URL("file:/" + classDir + File.separator);
// 动态加载/执行
URLClassLoader loader = new URLClassLoader(new URL[] { url });
Class<?> clazz = loader.loadClass(classname);
Object obj = clazz.newInstance();
Method method = clazz.getMethod("run");
method.invoke(obj);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (file != null) {
file.delete();
file = new File(classname + ".class");
if (file != null)
file.delete();
}
}
}
}
代码参考了其它网站。
分享到:
相关推荐
java动态编译的几种技术介绍。JavaCompiler --JDK6 API的简介(java动态编译)
java动态编译java源文件,并利用Instrumentation实现重定义class
java 动态编译.java文件,动态运行类
添加动态执行的编译环境 options 是个集合,添加内容,字符集,classpath等 * 6.传入JavaFileObject的java文件,是个集合,创建JavaSourceObject实现这个接口,Kind.SOURCE.extension = '.java' * 7.创建任务并...
本代码块为动态编译指定java文件,将编译后的class生成jar文件.调用示例为BuildRmi类
java 动态编译.java文件,动态运行类 _1.2
java 动态编译.java文件,动态运行类 _1.3
Java的动态编译知识,真真在实际开发中并不是经常遇到。但是学习java动态编译有助于我们从更深一层次去了解java。对掌握jdk的动态代理模式,还有比如CGLIB,Spring 的AOP的原理就很有帮助。这样我们在学习其他一些开源...
java动态编译 ,写了一个jsp在页面上编辑java代码,然后servlet动态编译并执行main方法
java动态编译源码并调用的三种方式,全部包含在内,并且有文档说明,还是相当不错的。
java 动态编译.java文件,动态运行类 _1.1
SpringBoot 应用动态编译 Java 源码并注入 Spring 容器,实现动态修改接口和抽象类的实现。注意,项目以 Jar 包形式启动时要在命令行引入 tools.jar 的包,IDEA下可直接调试。 基于接口、抽象类实现不停机动态调整...
java 动态编译特性的展示工程勘误篇
Java 动态编译小工具。(此工具可兼容 jar in jar 的情况)。本工具的代码主要源自 arthas。
利用Java的动态编译、动态加载结合EasyRules实现业务规则的动态性的项目源码,具体详情请查看相关博客https://blog.csdn.net/qq_31142553/article/details/85013989
JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA反编译工具JAVA...
后来考虑到这样编程的任务很重,时间有限 后来在网上搜搜,看到使用动态编译并使用反射机制 ,这样计算表达式的编程就容易多了. 前几天要做一个计算数学表达式的题目,本来计划使用解析表达式的方法来解析各种数学...
Java语言-动态编译代码并热加载类,js热加载
NULL 博文链接:https://zheng12tian.iteye.com/blog/1488813
动态编译可以用于实现动态代码生成、动态加载、插件化等功能。