-
Notifications
You must be signed in to change notification settings - Fork 9
Home
Muhammad Hammad edited this page Apr 15, 2020
·
5 revisions
Dynamic Loader is In Memory Java Compiler and classpath loader which enables compile both java file and code string in memory and also provides support to load supportive jars in classpath which need to compile the dynamic code.
From java 9 dynamic compiler need java module libraries which can be export with javac params java.base/java.lang is by default exposed.
DynamicCompiler dynamicCompiler = new DynamicCompiler();
dynamicCompiler.addOption("--add-exports", "java.sql/java.sql=ALL-UNNAMED");
public class SourceTest {
@Test
public void sourceCodeTest() throws Exception {
StringBuilder sourceCode = new StringBuilder();
sourceCode.append("package org.dvare.dynamic;\n");
sourceCode.append("public class SourceTestClass {\n");
sourceCode.append(" public String testMethod() { return \"inside test method\"; }");
sourceCode.append("}");
DynamicCompiler dynamicCompiler = new DynamicCompiler();
dynamicCompiler.addSource("org.dvare.dynamic.SourceTestClass", sourceCode.toString());
Map<String, Class<?>> compiled = dynamicCompiler.build();
Class<?> aClass = compiled.get("org.dvare.dynamic.SourceTestClass");
Assert.assertNotNull(aClass);
Assert.assertEquals(1, aClass.getDeclaredMethods().length);
}
}