<dependency>
<groupId>io.github.brettw</groupId>
<artifactId>jitescript</artifactId>
<version>1.4</version>
</dependency>
import jdk.internal.org.objectweb.asm.ClassWriter;
import static jdk.internal.org.objectweb.asm.Opcodes.*;
public class JitescriptExample {
public static void main(String[] args) throws Exception {
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
cw.visit(V1_8, ACC_PUBLIC + ACC_SUPER, "DynamicClass", null, "java/lang/Object", null);
cw.visitEnd();
byte[] bytecode = cw.toByteArray();
CustomClassLoader classLoader = new CustomClassLoader();
Class<?> dynamicClass = classLoader.defineClass("DynamicClass", bytecode);
}
static class CustomClassLoader extends ClassLoader {
public Class<?> defineClass(String name, byte[] bytecode) {
return defineClass(name, bytecode, 0, bytecode.length);
}
}
}
import jdk.internal.org.objectweb.asm.ClassWriter;
import static jdk.internal.org.objectweb.asm.Opcodes.*;
public class JitescriptExample {
public static void main(String[] args) throws Exception {
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
cw.visit(V1_8, ACC_PUBLIC + ACC_SUPER, "DynamicClass", null, "java/lang/Object", null);
cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "dynamicMethod", "()V", null, null).visitEnd();
cw.visitField(ACC_PUBLIC + ACC_STATIC, "dynamicField", "Ljava/lang/String;", null, null);
cw.visitEnd();
byte[] bytecode = cw.toByteArray();
CustomClassLoader classLoader = new CustomClassLoader();
Class<?> dynamicClass = classLoader.defineClass("DynamicClass", bytecode);
}
static class CustomClassLoader extends ClassLoader {
public Class<?> defineClass(String name, byte[] bytecode) {
return defineClass(name, bytecode, 0, bytecode.length);
}
}
}
import jdk.internal.org.objectweb.asm.ClassWriter;
import static jdk.internal.org.objectweb.asm.Opcodes.*;
import java.io.FileOutputStream;
import java.lang.reflect.Method;
public class JitescriptExample {
public static void main(String[] args) throws Exception {
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
cw.visit(V1_8, ACC_PUBLIC + ACC_SUPER, "DynamicClass", null, "java/lang/Object", null);
cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "dynamicMethod", "()V", null, null).visitEnd();
cw.visitField(ACC_PUBLIC + ACC_STATIC, "dynamicField", "Ljava/lang/String;", null, null);
cw.visitEnd();
byte[] bytecode = cw.toByteArray();
FileOutputStream fos = new FileOutputStream("DynamicClass.class");
fos.write(bytecode);
fos.close();
CustomClassLoader classLoader = new CustomClassLoader();
Class<?> dynamicClass = classLoader.defineClass("DynamicClass", bytecode);
Method dynamicMethod = dynamicClass.getDeclaredMethod("dynamicMethod");
dynamicMethod.invoke(null);
}
static class CustomClassLoader extends ClassLoader {
public Class<?> defineClass(String name, byte[] bytecode) {
return defineClass(name, bytecode, 0, bytecode.length);
}
}
}