Подтвердить что ты не робот

Как установить classpath при использовании javax.tools.JavaCompiler скомпилировать исходный код?

Я использую класс javax.tools.JavaCompiler (jdk6) для компиляции исходного файла, но исходный файл зависит от некоторого файла jar. Как установить путь к классам javax.tools.JavaCompiler?

4b9b3361

Ответ 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, так же, как сказано в первом ответе.