码云开源代码:

https://gitee.com/china-bin/vue-onlinecode

原理:
1.利用java里面有JavaComile 可以实现在程序里面编译允许其他的java代码

步骤:
1.利用JavaComile, 将java代码 编译到内存中
2.从内存中根据类名取出此类
3.通过java反射调用此类的方法

详细Demo代码如下:

import com.haiyang.onlinejava.complier.util.ClassClassLoader;import javax.tools.*;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.lang.reflect.Method;
import java.net.URI;
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
import java.nio.channels.FileChannel;
import java.nio.channels.WritableByteChannel;
import java.util.Arrays;/*** @author: bin* @email: 958615915@qq.com* @create: 2019-08-03*/
public class TestComiles {private String javaSource = "class Solution {   " +" public static String sayHello() {                return \"hello world\";        } " +"}";private String javaSource2 = "class Solution {   " +" public static String sayHello(int i) {                return \"hello world\" + i;        } " +"}";private String className = "Solution";private String methoName = "sayHello";// path 是你想把.class 放在哪里的路径,private String path = "C:\\Users\\bin\\Desktop\\java\\";public void comile() throws Exception {// javqComile 是java程序里的java编译器类JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler();// StandardJavaFileManager 对象主要负责// 编译文件对象的创建,编译的参数等等,我们只对它做些基本设置比如编译 CLASSPATH 等。StandardJavaFileManager standardJavaFileManager = javaCompiler.getStandardFileManager(null, null, null);// JavaFileObject 为类文件上进行操作的工具的文件抽象StringObject stringObject = new StringObject(className, javaSource2);JavaFileObject javaFileObject = stringObject;// Array Map Set 等都属于Itreable类型Iterable options = Arrays.asList("-d", path);Iterable<? extends JavaFileObject> files = Arrays.asList(javaFileObject);// 通过一些选项,javafileObject, classPath 来获取JvaComiler.ComilationTaskJavaCompiler.CompilationTask task = javaCompiler.getTask(null,standardJavaFileManager, null, options, null, files);// 将Class 在内存中编译Boolean result = task.call();// 通过类名 加载classClassLoader classLoader = new ClassClassLoader(getClass().getClassLoader());
//        ClassLoader classLoader = getClass().getClassLoader();Class cls = classLoader.loadClass(className);// java反射机制 method.setAcessible 设置允许访问Method method = cls.getMethod(methoName, int.class);method.setAccessible(true);Object[] args = new Object[]{2};args[0] = 1;Object obj = method.invoke(null, args);System.out.println(obj.toString());}public static void main(String[] args) {try {new TestComiles().comile();} catch (Exception e) {e.printStackTrace();}}private class StringObject extends SimpleJavaFileObject {private String contents = null;public StringObject(String clasName, String contents) throws Exception {super(URI.create("String:///" + clasName + Kind.SOURCE.extension), Kind.SOURCE);this.contents = contents;}@Overridepublic CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {return contents;}}private class ClassClassLoader extends ClassLoader {ClassClassLoader(ClassLoader parent) {super(parent);}@Overrideprotected Class<?> findClass(String name) throws ClassNotFoundException {//这个classLoader的主要方法String classPath = name.replace(".", "\\") + ".class";//将包转为目录String classFile = path + classPath;//拼接完整的目录Class clazz = null;try {byte[] data = getClassFileBytes(classFile);clazz = defineClass(name, data, 0, data.length);if (null == clazz) {//如果在这个类加载器中都不能找到这个类的话,就真的找不到了}} catch (Exception e) {e.printStackTrace();}return clazz;}private byte[] getClassFileBytes(String classFile) throws Exception {//采用NIO读取FileInputStream fis = new FileInputStream(classFile);FileChannel fileC = fis.getChannel();ByteArrayOutputStream baos = new ByteArrayOutputStream();WritableByteChannel outC = Channels.newChannel(baos);ByteBuffer buffer = ByteBuffer.allocateDirect(1024);while (true) {int i = fileC.read(buffer);if (i == 0 || i == -1) {break;}buffer.flip();outC.write(buffer);buffer.clear();}fis.close();return baos.toByteArray();}}}

java在线编译功能相关推荐

  1. java在线编译(JAVA编译过程)

    听说有一个Java在线编译网站 你可以上网搜索150 SCJP Questions And Answers关键字. 下面是这个网站,请用斜线代替加号,用点代替句号,前面加上http. it.caree ...

  2. Java在线编译运行示例

    很早就接触过Java在线编辑编译运行的企业应用, 感觉很NB很高端, 一晃很多年过去了... 闲来无事就自己去实现下看看. 还是有一些知识点的 1. Java 编译的功能是实现在tools.jar里边 ...

  3. JAVA在线编译,无需环境变量

    http://www.runoob.com/try/runcode.php?filename=HelloWorld&type=java

  4. java在线编译网站

    https://www.tutorialspoint.com/compile_java_online.php https://www.compilejava.net/ https://www.beta ...

  5. java语言编译_java在线编译-编译,java

    本教程分享:<java在线编译>, java在线编译网站或工具有哪些? 你做了很多了吧!很好,继续学吧! class.forName():加载的是指定的一个类 .class文件是由JAVA ...

  6. 实现java语言的在线编译(OnlineJudge)----前言

    前言 使用过leetcode或者类似在线编译网站功能的人,或许会比较感兴趣,关于在线编译的实现原理,由于我比较头铁,所以一冲动之下毕业设计的项目选择制作一个类似于在线编译的一个网站. 在决定做这个之前 ...

  7. Java 在线运行编译【运行 Java 代码工具推荐】

    JJava 在线运行编译,是一款可在线编程编辑器,在编辑器上输入Java代码,点击运行,可在线编译运行Java,Java代码在线运行调试,Java在线编译,可快速在线测试您的Java代码,在线编译Ja ...

  8. Java 在线编程编译工具上线,直接运行Java代码

    前言 大家好,我是小哈~ 周末没出去浪,花了点时间,在我的个人网站上线了一款小工具.啥工具呢?一款可以在线编译 Java 代码并运行输出结果的小工具. 大家都知道,甲骨文刷 Java 版本号非常积极, ...

  9. 在线 OJ 项目(二) · 操作数据库 · 设计前后端交互的 API · 实现在线编译运行功能

    一.操作数据库前的准备 二.封装操作数据库数据的相关操作 三.设计前后端交互的 API 四.实现在线编译运行功能 一.操作数据库前的准备 设计数据库表 我们需要对数据库中存储的题目进行操作. 创建一个 ...

  10. 简单java socket_基于Java Socket实现一个简易在线聊天功能(一)

    最近做了一个项目,其中有一个在线网页交流的需求,好久没写代码了,手都生疏了,于是先写demo练练手,分享到脚本之家平台,以此做个记录,方便自己和大家使用. 先给大家说下实现步骤分这样几大步: 1.使用 ...

最新文章

  1. git显示服务器所有分支,怎么拉取git服务器上面的分支到本机?
  2. 经典面试题(36):以下代码将输出的结果是什么?
  3. 3.3栈与递归的实现
  4. Delphi的Indy通信中发送流文件的注意事项
  5. 空号检测、号码状态查询接口免费测试、精准实时版(支持携号转网查询)
  6. cv2.error: OpenCV(4.5.3) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-q3d_8t8e\opencv\modul
  7. 标签打印软件如何设计正反面打印模式
  8. java节假日算法_java节假日
  9. 三角函数逼近锯齿函数和阶梯函数
  10. 软件工程与计算-11-人机交互设计
  11. stLFR(single tube Long Fragment Read)介绍
  12. 架构整洁之道,整洁架构
  13. 用计算机计算应该注意什么,多功能计算器的使用方法及注意事项
  14. redis 查看的版本
  15. 布隆过滤器:一种低空间成本的判断元素是否存在的方式
  16. 026 Rust死灵书之实现Vec
  17. 找工作--JAVA--广州
  18. java如何与RS232进行通信
  19. 字符流(输入,输出)
  20. 诺基亚106支持Java,如何使用诺基亚Java SDK 2.0在诺基亚40系列中实现推送通知?

热门文章

  1. Altium Designer
  2. 基于Jsp的简单论坛(BBS)的设计与实现(附代码)
  3. 《逻辑学导论》思路整理
  4. 网络编程:UDP的socket编程(Linux)
  5. 焦作机器人编程比赛_焦作市山阳区东环小学在第二十届全国中小学电脑制作活动“机器人竞赛”焦作选拔赛中创佳绩...
  6. RootKit检测工具
  7. 基于java的教学评价系统的设计与实现
  8. QT--内存错误导致程序崩溃
  9. 思维导图工具----Edraw
  10. 渗透之——ASP Web提权