Я использую класс javax.tools.JavaCompiler
(jdk6) для компиляции исходного файла, но исходный файл зависит от некоторого файла jar. Как установить путь к классам javax.tools.JavaCompiler
?
Как установить classpath при использовании javax.tools.JavaCompiler скомпилировать исходный код?
Ответ 1
javax.tools.JavaCompiler # getTask() принимает параметр options
, который позволяет устанавливать параметры компилятора. Следующий message описывает простой способ установить их для доступа к пути класса вызывающей программы:
Вам необходимо настроить стандарт java файловый менеджер, чтобы узнать о jar files (s) - вы используете компилятор аргументы options для этого.
По умолчанию объект компилятора java только, кажется, знает о дефолте местоположения для bootclasspath, extdirs и одобренных каталогов в терминах его пути к классам.
Вам необходимо добавить вызывающую программу текущий путь к java-компилятору экземпляр, который передается на стандартный файловый менеджер, который будет затем найдите классы в файлах jar.
Вот как я это делаю в компилятор обертка, которую я написал
List<String> optionList = new ArrayList<String>(); // set compiler classpath to be same as the runtime's optionList.addAll(Arrays.asList("-classpath",System.getProperty("java.class.path"))); // any other options you want optionList.addAll(Arrays.asList(options)); JavaCompiler.CompilationTask task = compiler.getTask(out,jfm,diagnostics,optionList,null,jfos);
Все, что вам понадобится, это получить правильный путь к классу при запуске вызывающей программы.
Ответ 2
Одна и та же проблема возникла у меня в последнее время, наконец, я нашел два обходных решения. Вы можете установить путь к классу либо путем вызова StandardJavaFileManager.setLocation(StandardLocation.CLASS_PATH, "YOUR_CLASS_PATH" ) или Compiler.getTask(ARG_0, ARG_1, ARG_2, CLASS_PATH_OPTIONS, так же, как сказано в первом ответе.