Я собираюсь начать с некоторых конкретных вопросов, которые у меня есть, и следовать за ними с контекстом:
- Как я могу контролировать настройку проверки кода GWT в eclipse?
- Что делает проверка кода GWT?
- Когда он сканирует классы Java, выполняет ли он загрузку классов?
- Почему он сканирует классы, которых нет в клиентских/общих пакетах? И как я могу остановить это?
Я использую Eclipse Juno. Недавно другой член моей команды обновил наш проект с GWT 2.4 до 2.5, и первым эффектом, который я заметил, было то, что проверка кода GWT потребляла ресурсы, останавливала мое рабочее пространство и, в конечном итоге, завершалась ошибкой кучи java, что вынуждало меня убить затмение.
Имейте в виду, у меня было много кучи, настроенной в моем eclipse.ini
, а именно: -Xms256m -Xmx1536m
Тем не менее, чтобы восстановить контроль над своим рабочим пространством, я снял флажок Project --> Build Automatically
, настроил eclipse для отображения использования кучи с помощью Preferences --> General --> Show Heap Status
и увеличил размер кучи в eclipse.ini
до -Xms2048m -Xmx3072m
просто в качестве эксперимента, чтобы посмотреть, что произойдет.
После этого я снова открыл eclipse и разрешил ему собираться автоматически, обращая пристальное внимание на индикатор выполнения, когда он выполнял фазу проверки кода GWT, и на размер кучи: он карабкался, карабкался и карабкался, наконец, где-то достиг пика к северу от потребляемого 2G. В конце концов, он завершился (хотя это заняло слишком много времени, совсем не разумное количество времени). В течение минуты после того, как это было сделано, огромная сборка мусора уменьшила кучу всего до 300 мегабайт.
То, что я увидел под индикатором выполнения, было более интересным: проверка кода GWT сканировала каждый файл *.java
во всем моем проекте: не только те, которые находятся в пакетах client
и shared
, а все. Я видел имена классов, которые компилятор GWT не увидит и через миллион лет.
Таким образом, похоже, что, хотя компилятор GWT достаточно умен, чтобы начать с файлов модуля точки входа GWT и искать оттуда, процесс проверки кода GWT, похоже, выполняет поиск методом грубой силы во всем.
И да поможет ему Бог, если по пути он выполняет какую-либо загрузку классов. Некоторые из этих старых серверных классов содержат древние грехи моих предков, подключение к внешним ресурсам в статических инициализаторах и тому подобное.
Есть ли способ настроить эту проверку, чтобы она была более экономной в отношении того, что она сканирует?