-
大小: 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網絡程序設計動態溫度曲線繪制
評論
共有 條評論