Как задать путь к классу, когда я использую javax.tools.JavaCompiler компилирует исходный код?
-
21-09-2019 - |
Вопрос
Я использую этот класс javax.tools.JavaCompiler
(jdk6) для компиляции исходного файла, но исходный файл зависит от некоторого файла jar.Как задать путь к классу javax.tools.JavaCompiler
?
Решение
В javax.инструменты.JavaCompiler#Получение задачи() метод требует options
параметр, позволяющий задать параметры компилятора.Следующее Сообщение описывает простой способ установить их, чтобы получить доступ к classpath вызывающей программы:
Вам необходимо настроить стандартный файловый менеджер Java, чтобы знать о файлах jar - вы используете компилятор для этого используется аргумент options.
По умолчанию объект компилятора java кажется, знает только о местоположениях по умолчанию для bootclasspath, extdirs и каталогов, одобренных dirs в терминах его classpath.
Вам нужно добавить вызывающую программу текущий путь к классу в компилятор java экземпляр, который передается в стандартный файловый менеджер, который будет затем находить классы в файлах jar.
Вот как я это делаю в компилятор оболочка, которую я написал
List<String> optionList = new ArrayList<String>(); // set compiler's 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);
Все, что вам тогда понадобится, - это правильно задать путь к классу при запуске вызывающей программы.
Другие советы
Недавно со мной возникла та же проблема, наконец я нашел два обходных пути.Вы можете задать путь к классу либо с помощью invoke StandardJavaFileManager.setLocation(Стандартное расположение.CLASS_PATH, "YOUR_CLASS_PATH") или Compiler.getTask(ARG_0, ARG_1, ARG_2, CLASS_PATH_OPTIONS, как указано в первом ответе, опубликованном здесь.