Проблемы с чтением исходных файлов Java из IncrementalGenerator с использованием SDM

Я пишу небольшую структуру для обработки асинхронных вызовов. Чтобы показать, как работает фреймворк, я создал витрину. Внутри витрины я хочу показать код (из исходных файлов Java) и то, что произойдет, когда код будет выполнен. Что-то похожее на GWT Showcase.

Чтобы показать код, я использую IncrementalGenerator для чтения исходных файлов Java и создания кода для виджета, представляющего код. Для этого я использовал тот же код для чтения файла Java, что и раньше в других проектах.

Это выглядит так:

InputStream in = classLoader.getResourceAsStream(path);
if (in == null) {
  logger.log(TreeLogger.ERROR, "Resource not found: " + path);
  throw new UnableToCompleteException();
}

где path — это относительный путь к файлу, который я хочу прочитать. В случае SuperDevMode InputStream всегда имеет значение null. Я также пытался работать со старым классом Generator, но это тоже не сработало. Похоже, что файлы недоступны внутри пути к классам при запуске генератора в случае запуска сервера кода.

Я попробовал тот же код с Dev-Mode-Plugin, и он отлично работает!

Итак, как я могу получить доступ к исходным файлам Java проекта внутри IncrementalGenerator с помощью SuperDevMode?

Я использую GWT 2.6.1, IntelliJ v13.1 Ultimate.

заранее спасибо


person El Hoss    schedule 25.08.2014    source источник


Ответы (2)


Если вы передаете исходники CodeServer, используя его аргумент -src, то они не будут находиться в пути к классам; если вы ожидаете их в ClassLoader, то они должны быть в пути к классам (например, вы передаете их компилятору GWT или DevMode). Чтобы сделать ваш генератор надежным, вы должны сначала попробовать ResourceOracle, а затем вернуться к ClassLoader.


К вашему сведению, некоторые встроенные генераторы в настоящее время загружаются из пути к классам и модифицируются для загрузки из ResourceOracle для лучшей инкрементной компиляции: https://gwt-review.googlesource.com/8811

person Thomas Broyer    schedule 25.08.2014
comment
Спасибо за ваш ответ. Пробовал CodeServer с аргументом -src и без, пробовал использовать ResourceOracle, но все не дало положительного результата. Я буду копать глубже. У меня есть какие-либо идеи, как исследовать эту проблему, я хотел бы их услышать. - person El Hoss; 25.08.2014
comment
Кстати, мне всегда приходилось вводить абсолютный путь при использовании аргумента -src. - person El Hoss; 25.08.2014
comment
Обновленный ответ, чтобы быть более точным: если вы ожидаете что-то в ClassLoader, они должны быть в пути к классам; GWT сам не создает новые загрузчики классов (за исключением служебной стороны веб-приложения в DevMode или перекомпилирующего загрузчика классов DevMode) - person Thomas Broyer; 25.08.2014

Я трачу еще несколько часов, чтобы найти обходной путь для этой проблемы.

В конце концов, это не было связано с GWT. Я обнаружил, что аргумент -src не влияет на содержимое пути к классам. В настройках компилятора проекта IntelliJ я нашел настройку, которая управляет типом ресурсов, которые копируются в путь к классам. После того, как я удалил шаблон, который позволил остановить копирование IntelliJ файлов *.java в путь к классам, все работает нормально.

настройка шаблона ресурсов компилятора выглядит

Похоже, вывод пути к классам нельзя было контролировать с помощью аргумента -src в IntelliJ.

person El Hoss    schedule 26.08.2014