Почему Eclipse постоянно перестраивает проект в моем рабочем пространстве?

Мы используем JRebel для быстрой перезагрузки изменений кода Java в нашу JVM. Это отлично работает!

Но мы также используем Eclipse в качестве IDE. И по какой-то причине Eclipse действительно может перестроить весь проект в моей рабочей области просто потому, что я добавляю аннотацию, удаляю метод или любое другое небольшое изменение кода ... Из-за этой фазы перестройки все классы регенерируются и требуются будет перезагружен JRebel.

Есть ли какой-нибудь способ отладить, почему Eclipse всегда перестраивает наш проект даже для небольшого глупого изменения кода? Я использую Eclipse Indigo.

Спасибо, Йохен


person Jochen Hebbrecht    schedule 14.11.2012    source источник
comment
Я думал, что весь смысл JRebel заключается в том, чтобы видеть изменения вашего кода немедленно на сервере, без необходимости проходить дополнительный этап сборки / повторного развертывания. Отключение автоматической сборки Eclipse звучит слишком резко.   -  person JesperE    schedule 14.11.2012
comment
горячее развертывание в eclipse без jrebel stackoverflow.com/q/998737/106261   -  person NimChimpsky    schedule 14.11.2012
comment
Какие натуры и строители есть на проекте? Пересборка всего проекта - это ненормально для вашего сценария ...   -  person Tom Seidel    schedule 14.11.2012
comment
Мой .classpath: pastebin.com/168DDdxu. Мой .project: pastebin.com/FxHWfNBT   -  person Jochen Hebbrecht    schedule 14.11.2012
comment
Пожалуйста, вставьте свой исходный код в свой вопрос и не используйте внешние сайты, такие как pastebin   -  person Tom Seidel    schedule 14.11.2012
comment
Если вы удалите все натуры и строители, кроме одного из JDT, будет ли у вас такое же поведение (просто чтобы исключить это как возможную причину)?   -  person Tom Seidel    schedule 14.11.2012
comment
@TomSeidel: хорошо, я попробую. Спасибо за отзыв!   -  person Jochen Hebbrecht    schedule 14.11.2012
comment
@TomSeidel: нет, происходит то же самое ...   -  person Jochen Hebbrecht    schedule 14.11.2012


Ответы (2)


Отключение опции автоматической сборки не нарушает работу JRebel. JRebel зависит от результатов компиляции, поэтому, если вы отключите автоматическую сборку, вам придется просто скомпилировать измененные классы самостоятельно, вот и все.

Вы можете попробовать установить аргумент виртуальной машины -Drebel.check_class_hash = true, который будет проверять контрольную сумму перед перезагрузкой классов. Это может замедлить время перезарядки с нескольких миллисекунд до дополнительных миллисекунд. Но это все же лучше, чем ситуация, когда все классы проекта приходится перезагружать.

person Anton Arhipov    schedule 15.11.2012

Вам необходимо отключить (или) снять флажок Build Automatically.

Перейти к меню "Проект" ---> снимите флажок "Создавать автоматически".

ПРИМЕЧАНИЕ. Это отключает автоматическую сборку. Но, как прокомментировал JesperE, это может повлиять на причину, по которой вы JRebel.

person kosa    schedule 14.11.2012
comment
Откровенно говоря, я никогда не использовал JRebel. Но комментарий JesperE, возможно, стоит проверить, прежде чем принимать решение об отключении автоматической сборки. - person kosa; 14.11.2012
comment
... Я уверен, что этот вариант ломает JRebel :-). Я разговаривал с ребятами из JRebel на #devoxx - person Jochen Hebbrecht; 14.11.2012
comment
@JochenHebbrecht: Полезно знать. Итак, ответ будет заключаться в том, что вам нужно использовать автоматическую сборку, если вы хотите, чтобы JRebel работал. В противном случае вы можете отключить автоматическую сборку, как я сказал в своем ответе. - person kosa; 14.11.2012
comment
Нет, ребята из JRebel говорят, что это ненормально, Eclipse перестраивает весь проект только для удаления метода. Что-то не так с Eclipse и / или плагином, установленным в моем Eclipse. Поэтому мне нужно выяснить, что не так. - person Jochen Hebbrecht; 14.11.2012
comment
@JochenHebbrecht отключение опции автоматической сборки не нарушает работу JRebel. JRebel зависит от результатов компиляции, поэтому, если вы отключите автоматическую сборку, вам придется просто скомпилировать измененные классы самостоятельно, вот и все. (я из команды JRebel) - person Anton Arhipov; 14.11.2012
comment
в качестве альтернативы вы можете попробовать установить аргумент виртуальной машины -Drebel.check_class_hash = true, который будет проверять контрольную сумму перед перезагрузкой классов. Это может замедлить время перезарядки с нескольких миллисекунд до дополнительных миллисекунд. Но это все же лучше, чем ситуация, когда все классы проекта приходится перезагружать. - person Anton Arhipov; 14.11.2012
comment
@AntonArhipov: работает !!! :-). Можете ли вы добавить свой комментарий в качестве ответа, чтобы я мог принять правильный ответ? Спасибо! - person Jochen Hebbrecht; 15.11.2012