Кеш компиляция java - PullRequest
       9

Кеш компиляция java

2 голосов
/ 03 декабря 2009

Есть ли возможность кэшировать компиляцию Java, как ccache для компиляции C или C ++?

У меня много кода для компиляции, и я компилирую один и тот же код много раз, так что это заняло много времени. Вот я и подумал, что это нужно кэшировать, чтобы ускорить.


Но главная проблема в том, что весь исходный код имеет много файлов во многих каталогах, и существует так много java-файлов. Компиляция выполняется скриптами ant, которые вызываются скриптом make. Он должен быть скомпилирован JDK Солнца. И что еще ... между компиляциями я должен очистить все созданные * файлы классов.

Поэтому я не могу использовать какие-либо функции IDE.

Ответы [ 3 ]

8 голосов
/ 03 декабря 2009

Eclipse делает инкрементную компиляцию классов (я полагаю, другие тоже это делают). Только часть вашего класса, которая изменится, будет скомпилирована. Все остальное не изменится. Это работает достаточно хорошо в реальных проектах.

Инструменты сборки, такие как Maven и Ant , можно настроить для компиляции только измененных файлов Java . Они не отслеживают зависимости в некоторых сценариях, в которых они пропускают необходимые компиляции. (Например, измените подпись в суперклассе.)

2 голосов
/ 03 декабря 2009

Насколько мне известно, в самом JDK от Sun нет функции кэширования.

Однако большинство Java IDE кэшируют компиляцию, поэтому, если вам нужна «компиляция по требованию», это должно быть сделано.

Eclipse и Netbeans определенно имеют это. Они будут перекомпилировать только измененные классы (и их зависимости, которые они выясняют автоматически). Это довольно быстро для большинства изменений.

2 голосов
/ 03 декабря 2009

Лучшим способом было бы разделить общие классы на служебные файлы, которые вы просто включили бы в свой путь к классам компиляции, если только на самом деле нет особой (и веской) причины, которая мешает вам сделать это (дублирование кода - зло привести тебя к гибели :)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...