适用场景:
Java应用满足用户自定义需求场景
实例代码:
测试用例(DynamicCompileTest)
package com.taobao.yugong.common;
import java.io.IOException;
import java.util.List;
import junit.framework.Assert;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.junit.Test;
import com.taobao.yugong.ITest;
import com.taobao.yugong.common.utils.compile.JdkCompiler;
public class DynamicCompileTest {
@Test
public void test() {
String javasource = null;
try {
List lines = IOUtils.readLines(Thread.currentThread()
.getContextClassLoader()
.getResourceAsStream("DynamicCompile.txt"));
javasource = StringUtils.join(lines, "\n");
} catch (IOException e) {
Assert.fail(ExceptionUtils.getFullStackTrace(e));
}
JdkCompiler compiler = new JdkCompiler();
Class> clazz = compiler.compile(javasource);
try {
System.out.println(((ITest) clazz.newInstance()).getPi());
} catch (InstantiationException e) {
Assert.fail(ExceptionUtils.getFullStackTrace(e));
} catch (IllegalAccessException e) {
Assert.fail(ExceptionUtils.getFullStackTrace(e));
}
}
}
源文件
package com.taobao.yugong;
public class DynamicCompile implements ITest {
@Override
public String getPi() {
return String.valueOf(Math.PI);
}
}
接口定义
package com.taobao.yugong;
public interface ITest {
public String getPi();
}
JdkCompiler文件定义,详见
https://github.com/alibaba/yugong