• 大小: 15KB
    文件类型: .zip
    金币: 1
    下载: 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\JavaClassobject.java
     文件         796  2019-01-30 11:00  com\compile\shell\JavaSourceobject.java

评论

共有 条评论