Skip to content
Muhammad Hammad edited this page Apr 15, 2020 · 5 revisions

Dynamic Loader

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.

JAVA 9

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");

Example

In Memory Compilation..
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);
        }
    }
Clone this wiki locally