package com.test.dynamic_compile;
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.ToolProvider;
import javax.tools.JavaCompiler.CompilationTask;
public class MyClassLoader {
private static URLClassLoader classLoader =null;
private MyClassLoader(){}
public static synchronized URLClassLoader getUrlClassLoader(){
// if(classLoader == null){
try {
File libDir = new File(GlobalProperties.DYNAMIC_CLASS_PATH+"lib");
File classDir = new File(GlobalProperties.DYNAMIC_CLASS_PATH+File.separator+"classes");
libDir.mkdirs();
classDir.mkdirs();
File projectLibDir = new File(GlobalProperties.PROJECT_PATH+"WEB-INF"+File.separator+"lib");
File projectClassbDir = new File(GlobalProperties.PROJECT_PATH+"WEB-INF"+File.separator+"classes");
List<URL> urls = new ArrayList<URL>();
File[] projectLibs = projectLibDir.listFiles();
for(int i=0;projectLibs!=null&&i<projectLibs.length;i++){
urls.add(projectLibs[i].toURL());
}
File[] libs = libDir.listFiles();
for(int i=0;libs!=null&&i<libs.length;i++){
urls.add(libs[i].toURL());
}
urls.add(classDir.toURL());
urls.add(projectClassbDir.toURL());
classLoader = new URLClassLoader(urls.toArray(new URL[]{}));
} catch (Exception e) {
e.printStackTrace();
}
// }
return classLoader;
}
public static boolean compile(String code,String name){
try {
JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler();
JavaFileObject fileObject = new StringJavaObject(name, code);
List<String> options = new ArrayList<String>();
options.add("-d");
options.add(GlobalProperties.DYNAMIC_CLASS_PATH+File.separator+"classes"+File.separator);
options.add("-classpath");
File libDir = new File(GlobalProperties.DYNAMIC_CLASS_PATH+"lib");
File classDir = new File(GlobalProperties.DYNAMIC_CLASS_PATH+File.separator+"classes"+File.separator);
File projectLibDir = new File(GlobalProperties.PROJECT_PATH+"WEB-INF"+File.separator+"lib");
File projectClassbDir = new File(GlobalProperties.PROJECT_PATH+"WEB-INF"+File.separator+"classes"+File.separator);
StringBuffer path = new StringBuffer();
//
File[] projectLibs = projectLibDir.listFiles();
for(int i=0;projectLibs!=null&&i<projectLibs.length;i++){
if(!path.toString().isEmpty()){
path.append(";");
}
path.append(projectLibs[i].getCanonicalPath());
}
File[] libs = libDir.listFiles();
for(int i=0;libs!=null&&i<libs.length;i++){
if(!path.toString().isEmpty()){
path.append(";");
}
path.append(libs[i].getCanonicalPath());
}
//
path.append(";");
path.append(projectClassbDir.getAbsolutePath());
path.append(";");
path.append(classDir.getAbsolutePath());
options.add(path.toString());
//options.add("-classpath");
//options.add(classDir.getAbsolutePath());
System.out.println(options);
CompilationTask task = javaCompiler.getTask(null, null, null,
options, null,
Arrays.asList(fileObject));
boolean success = task.call();
return success;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public static Class<?> loadClass(String fullName){
try {
return getUrlClassLoader().loadClass(fullName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
DynamicCompile.zip (27个子文件)
DynamicCompile
src
com
test
dynamic_compile
MyClassLoader.java 4KB
Test2.java 109B
DynamicCompileServlet.java 2KB
StringJavaObject.java 921B
GlobalProperties.java 1003B
Test.java 432B
global.properties 115B
.classpath 529B
.mymetadata 315B
.settings
org.eclipse.wst.jsdt.ui.superType.container 49B
org.eclipse.wst.common.project.facet.core.xml 252B
org.eclipse.wst.jsdt.ui.superType.name 6B
org.eclipse.wst.common.component 480B
.jsdtscope 500B
org.eclipse.jdt.core.prefs 364B
.myeclipse
.project 2KB
WebRoot
META-INF
MANIFEST.MF 36B
bin
index.jsp 2KB
WEB-INF
classes
com
test
dynamic_compile
StringJavaObject.class 1KB
DynamicCompileServlet.class 3KB
MyClassLoader.class 5KB
Test2.class 390B
GlobalProperties.class 2KB
Test.class 1KB
global.properties 115B
lib
fastjson-1.1.31.jar 355KB
web.xml 404B
共 27 条
- 1
资源评论
童无心
- 粉丝: 14
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功