JavaCompiler внутри банки - PullRequest
       2

JavaCompiler внутри банки

1 голос
/ 02 апреля 2012

мой JavaCompiler возвращает нулевой указатель при вызове из файла JAR.

Все работает нормально, если я запускаю свою программу с JavaCompiler из командной строки. Таким образом, JDK правильно установлен в моей ОС.

Почему не работает?

Код:

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
Iterable<String> options = Arrays.asList( new String[] { "-d", currentDir+"/cache/","-sourcepath",currentDir+"/srcss/"} );
Iterable<? extends JavaFileObject> compUnits =  fileManager.getJavaFileObjects(fRun);
Boolean compRes = compiler.getTask(null, fileManager, null, options, null, compUnits).call();

Ответы [ 3 ]

2 голосов
/ 02 апреля 2012

Необходимо убедиться, что вы используете ту же среду выполнения при запуске приложения, что и jar.

Когда вы запускаете его как отдельное приложение, вы, вероятно, используете rt.jar из какой-то базовой установки JRE, а при запуске из IDE вы, скорее всего, используете rt.jar из JDK.

Вы можете сделать System.out.println(System.getProperty("java.home")); для отладки.

0 голосов
/ 02 апреля 2012

Насколько я понимаю, компилятор JavaCompiler = ToolProvider.getSystemJavaCompiler ();Возвращает дескриптор компилятору java, только если его beign выполнен в JDK и дистрибутиве.

если вы используете его в JRE (как обычно мы выполняем только в JRE), он вернет null, не могли бы вы подтвердить, что мывызывая его из JDK или он содержит соответствующий файл jar на месте

0 голосов
/ 02 апреля 2012

Если это ваше собственное развертывание (на вашем компьютере), проблему можно решить, явно добавив tools.jar SDK к пути к классам во время выполнения вашего приложения (например, укажите это в манифесте) .

Альтернативные стратегии можно увидеть (или, по крайней мере, намекнуть) в конфигурации STBC . Если вам нужно больше информации. о тех, дай мне знать.

...