-
大小: 15KB文件类型: .zip金币: 2下载: 0 次发布日期: 2021-05-13
- 语言: Java
- 标签: javaCompile 动态编译
资源简介
*1.创建 URLClassLoader 类加载器
* 2.获取当前执行的classpath的所有jar包的路径
* 3.通过java的ToolProvider创建JavaCompile,用来执行class源文件
* 4.创建DiagnosticCollector用来执行获取执行失败的错误结果
* 5.添加动态执行的编译环境 options 是个集合,添加内容,字符集,classpath等
* 6.传入JavaFileObject的java文件,是个集合,创建JavaSourceObject实现这个接口,Kind.SOURCE.extension = '.java'
* 7.创建任务并执行
* 8.获取执行完成后的返回JavaClassObject类
* 9.创建DynamicClassLoader来加载类 ,defineClass这个方法

代码片段和文件信息
package com.compile.executor;
import com.compile.shell.*;
/**
* @Description: 获取编译后的结果
* @Auther: wjx
* @Date: 2019/1/29 15:45
*/
public class JavaShellExecutor {
/**
* 获取类名,等于ruleName
*
* @param ruleName
* @return
*/
public String getClassName(String ruleName) {
String className = ruleName.replaceAll(“[^a-z^A-Z]“ ““);
return className.substring(0 1).toUpperCase() + className.substring(1);
}
/**
* 获取编译的结果
*
* @param className
* @param classobject
* @param ruleName
* @return
*/
public object getCompileResult(String className JavaClassobject classobject String ruleName) {
//使用新的自定义Classloader,记得每个规则使用一个新的classloader
//当规则更新时,老的classloader可被释放
try {
if (DataEventFactory.eventClassLoaders.get(ruleName) == null) {
DynamicEngine.getInstance().createNewClassLoader(ruleName);
}
DynamicClassLoader dynamicClassLoader = new DynamicClassLoader(DataEventFactory.eventClassLoaders.get(ruleName));
Class aClass = dynamicClassLoader.loadClass(JavaSourceobject.packageName + ruleName classobject);
object o = null;
try {
o = aClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(o);
return o;
} catch (Throwable e) {
throw new RuntimeException(“load class error!“ + “className=“ + className + “\r\n“ + e.getMessage() e);
}
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-01-30 10:59 com\
文件 10353 2019-01-30 14:39 compile-shell-0.0.1-SNAPSHOT.jar
目录 0 2019-01-30 11:05 com\compile\
目录 0 2019-01-30 14:39 com\compile\executor\
文件 1756 2019-01-30 14:39 com\compile\executor\JavaShellExecutor.java
目录 0 2019-01-30 14:24 com\compile\shell\
文件 1018 2019-01-30 11:00 com\compile\shell\ClassFileManager.java
文件 425 2019-01-30 11:00 com\compile\shell\DataEventFactory.java
文件 841 2019-01-30 11:00 com\compile\shell\DynamicClassLoader.java
文件 6127 2019-01-30 14:24 com\compile\shell\DynamicEngine.java
文件 844 2019-01-30 11:00 com\compile\shell\JavaClassob
文件 796 2019-01-30 11:00 com\compile\shell\JavaSourceob
- 上一篇:javaweb登录页面
- 下一篇:JAVA网络程序设计动态温度曲线绘制
评论
共有 条评论