概述
- 话不多说,上工具类
/**
* 装载字符串成为java可执行文件
*
* @param className className
* @param javaCodes javaCodes
* @return Class
*/
private Class<?> dynamicClassByNameAndCode(String className, String javaCodes)
{
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
StrSrcJavaObject srcObject = new StrSrcJavaObject(className, javaCodes);
Iterable<? extends JavaFileObject> fileObjects = Arrays.asList(srcObject);
String flag = "-d";
String outDir = "";
try
{
File classPath = new File(Thread.currentThread().getContextClassLoader().getResource("").toURI());
outDir = classPath.getAbsolutePath() + File.separator;
}
catch (URISyntaxException e1)
{
e1.printStackTrace();
}
Iterable<String> options = Arrays.asList(flag, outDir);
JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, null, options, null, fileObjects);
boolean result = task.call();
if (result == true)
{
try
{
return Class.forName(className);
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
}
return null;
}
private static class StrSrcJavaObject extends SimpleJavaFileObject
{
private String content;
StrSrcJavaObject(String name, String content)
{
super(URI.create("string:///" + name.replace('.', '/') + Kind.SOURCE.extension), Kind.SOURCE);
this.content = content;
}
@Override
public CharSequence getCharContent(boolean ignoreEncodingErrors)
{
return content;
}
}
- 调用方法
Class<?> clazz = dynamicClassByNameAndCode(this.serviceClassName, scriptCodes);
最后
以上就是背后月饼为你收集整理的动态注册java脚本到系统,获得其class的全部内容,希望文章能够帮你解决动态注册java脚本到系统,获得其class所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复