Я создаю функцию AWS Lambda, которая компилирует класс на лету. Но лямбда-функция выдает ошибку, так как не может найти зависимости, то есть операторы импорта для класса, скомпилированного на лету. Я привел пример кода для следующих шагов.
Пожалуйста, руководство о том, как я могу найти зависимости, т.е. установить путь к классу так, чтобы класс, созданный на лету, компилировался без каких-либо ошибок
Пример кода, который компилируется
private String constructTestCode(String methodCode) throws Exception{
StringBuffer strMethod = new StringBuffer();
strMethod.append("import org.json.simple.JSONObject;");
strMethod.append("public class TestJavaFile {");
strMethod.append("public void testSample() {");
strMethod.append("JSONObject j = new JSONObject();");
strMethod.append("}");
strMethod.append("}");
return strMethod.toString();
}
JavaCompilerCode
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
List<String> optionList = new ArrayList<String>();
optionList.addAll(Arrays.asList("-
classpath",System.getProperty("java.class.path")));
if (compiler == null) {
try {
Class<?> javacTool =
Class.forName("com.sun.tools.javac.api.JavacTool");
Method create = javacTool.getMethod("create");
compiler = (JavaCompiler) create.invoke(null);
compiler.getTask(null, null, null, optionList, null, null);
} catch (Exception e) {
throw new AssertionError(e);
}
}
try {
compiler.run(null, null, null,
javaFile.toFile().getAbsolutePath());
} catch (Exception e) {
context.getLogger().log("Exception " + e + "\n");
}
return javaFile.getParent().resolve(fileName + ".class");
Жидкая банка на один жир
task customFatJar(type: Jar) {
manifest {
attributes
'Class-Path': configurations.runtime.files.collect { it.name }.join('
')
}
baseName = 'all-in-one-jar'
from { configurations.compile.collect { it.isDirectory() ? it :
zipTree(it)
} }
with jar
}
Ошибка при выполнении лямбда-функции
/tmp/TestJavaFile.java:1: error: package org.json.simple does not exist
Файл для компиляции сохраняется в каталоге / tmp. Я не могу определить путь, где присутствуют JAR-файлы зависимостей и как установить его в classpath. Пожалуйста, руководство по этому вопросу.
Большое спасибо!