Я пытался создать класс для компиляции некоторого .java, который я создам во время выполнения, но я не могу заставить это работать правильно.Задача компиляции Java и параметр classpath не работают
Вот мой код
File bin = new File(args[args.length-1]);
System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.7.0_60");
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager standardJavaFileManager = compiler.getStandardFileManager(null, null, null);
try {
standardJavaFileManager.setLocation(StandardLocation.CLASS_OUTPUT, Arrays.asList(bin));
} catch (IOException e) {
System.err.println("Invalid bin directory");
e.printStackTrace();
}
List<String> options = new ArrayList<String>();
options.add("-Xlint:unchecked");
options.add("-classpath");
options.add("e:\\ParentProject.jar");
System.out.println(options);
CompilationTask compilationTask = compiler.getTask(null, standardJavaFileManager, null, options, null, standardJavaFileManager.getJavaFileObjectsFromFiles(archives));
compilationTask.call();
Я пытаюсь скомпилировать Son.java, который расширяет класс, который находится в ParentProject.jar, но он не работает, даже при использовании «-classpath» флаг. Однако, если я добавлю jar в путь сборки проекта компилятора, он работает (и ему не нужен флаг classpath). Это нормальное поведение?
И это приводит к другой проблеме. Когда я пытаюсь использовать этот кусок кода в проекте, который работает на сервере Tomcat, даже с банками в WEB-INF/lib, я не могу заставить его работать.
Я пришел к такому же решению перед выходными, когда я пытался его снова, я задаюсь вопросом, почему это было так трудно найти информацию об этой опции –