Может ли Eclipse обновлять ресурсы автоматически?


161

Eclipse (3.4.2 с PyDev) имеет дело с несинхронизированными ресурсами (файлами, которые были отредактированы вне IDE) в отличие от других IDE, которые я использовал, где только ресурсы с открытыми редакторами считаются несинхронизированными , В Eclipse любой ресурс может не синхронизироваться.

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

Я проверил Refresh Automaticallyнастройку Settings > General > Workspace, но это не имеет никакого эффекта. Есть ли способ заставить Eclipse всегда просто загружать неактивные ресурсы с диска?


Актуальный ответ для Eclipse 3.7+ находится во втором ответе.
Пол Верест

Вы даже можете синхронизировать с удаленными файлами с помощью удаленного системного обозревателя (RSE)
Кристоф Руссси


@ Борис, этот вопрос был задан несколькими годами ранее. Другой должна быть помечена как дубликат этого одного.
Гленн

Ответы:


199

Эта проблема будет исправлена ​​в Eclipse 3.7 (Индиго). Хотя « Автоматически обновлять» в конечном итоге приводит к синхронизации ресурсов, ловушка обновления существует только для Windows, поэтому в Linux и Mac OS необходимо периодически опрашивать файловую систему.

С версии 3.7 есть новое предпочтение Settings > General > Workspace > Refresh On Access(облегченное обновление). Это предпочтение заставляет Eclipse автоматически обновлять ресурсы, когда обнаруживает, что они «не синхронизированы». При открытии, чтении или поиске файлов это предотвратит возникновение несинхронизированных ошибок.

Смотрите также: https://bugs.eclipse.org/303517


61
Уму непостижимо, что это вариант . Я никогда не обновлял свои несинхронизированные файлы.
Христоффер Хаммарстрем

18
. :( Я боролся долго и упорно против того , чтобы его вариант , вы правы, это сумасшествие.
Джеймс Blackburn

6
И если вы хотите, чтобы эта опция была по умолчанию в Eclipse 3.8 / 4.2, проголосуйте здесь: bugs.eclipse.org/340977
Джеймс Блэкберн

5
Я использую IntelliJ IDEA, хотя. Мне никогда не нужно беспокоиться о сохранении файлов, потому что они сохраняются автоматически. Это просто работает. Если файл изменяется на диске, он изменяется в IDE. Когда возникает конфликт, он предупреждает вас и позволяет вам объединяться. Если хуже становится хуже, у него есть Местная история, так что вы всегда можете вернуться к несколько минут назад.
Кристофер Хаммарстрем

1
@ ChristofferHammarström: Eclipse также имеет локальную историю: щелкните правой кнопкой мыши в редакторе файлов> Сравнить с> Местная история.
ccpizza

28

Я думаю, что если вы щелкнете по узлу проекта в Project Explorer и нажмете F5 или щелкните правой кнопкой мыши и выберите «Обновить», все ресурсы для этого проекта будут обновлены. Кроме того, если вы нажмете CTRL + клик на нескольких проектах, вы сможете обновить несколько проектов одновременно.

Один клик по проекту, CTRL + A, чтобы выбрать все, и F5 должен делать именно то, что вам нужно - обновить все.

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


Я заметил, что этот ответ обычно получает голосование. Я хотел бы отметить, что этот вопрос относится к конкретной версии Eclipse: 3.4.2. На самом деле не было автоматического способа обновления несинхронизированных ресурсов до версии 3.7 Indigo из Eclipse , как упоминалось в ответе Джеймса Блэкберна . Метод, описанный в этом ответе, является единственным методом для достижения этого в версии 3.4.2 (и любой другой версии до 3.7 Indigo).


13
Обратите внимание, что обновление нескольких выбранных проектов не будет работать, если какой-либо из них будет закрыт - сначала необходимо отменить выбор закрытых проектов. В качестве альтернативы, если в представлениях Package Explorer или Navigator не выбран ни один проект, нажатие клавиши F5 обновит все открытые проекты (удерживая клавишу Ctrl, чтобы отменить выбор, нажатие на пустое место не работает).
Том Клифт

71
Никому не в обиду, но почему принятый ответ на вопрос о том, как заставить Eclipse сделать что-то автоматически, является описанием того, как это сделать вручную?
Срекел

9
@Srekel Потому что на момент публикации это был единственный способ сделать то, что хочет @DNS. Основываясь на более свежем ответе @James Blackburn, была проблема, о которой действительно сообщали и исправляли задолго до того, как этот вопрос был первоначально опубликован. В более поздних версиях Eclipse этот ответ неверен. Однако в этом вопросе специально упоминается Eclipse 3.4.2 - это метод решения проблемы, представленный в вопросе.
Томас Оуэнс

21

Проблема отсутствия синхронизации часто встречается в Eclipse IDE, поэтому вы должны проверить эту опцию: windows -> preference -> Workspace -> refresh с использованием собственных перехватов или опроса.


6
Я полагаю, что в настоящее время это правильный ответ, по крайней мере со времен «Затмения Марса».
Хенно Вермёлен

1
Этот флажок не работает для меня в Eclipse 4.5 в Ubuntu 14.04. После внешнего изменения файла Eclipse не увидит его, пока я не открою этот файл в Eclipse или не произнесу Обновить. Таким образом, браузер не видит обновления .cssфайла, например, если я обновляю этот файл из внешнего редактора при запуске приложения сервера из eclipse. Чтобы исправить это, я использовал этот плагин, который заставляет флажок фактически работать. Смотрите этот ответ .
Руслан Стельмаченко

Это рабочий вариант для версииNeon.3 Release (4.6.3)
Kimchi Man

В Neon.3 на Mac этот параметр находится в «Предпочтения»> «Основные»> «Рабочая область»> «Обновить» с использованием встроенных перехватчиков или опроса.
Jmelvin

5

Существует глобальное обновление - не выбирайте ничего (или все) в проводнике пакетов и нажмите F5 (или щелкните правой кнопкой мыши пустое место и выберите «Обновить»). Конечно, это может занять довольно много времени, если у вас есть большие проекты.


Это не автоматический, но очень эффективный (+1).
love.by.Иисус

5

Eclipse Helios обладает встроенной функцией обновления в «Предпочтения»> «Основные»> «Рабочая область». Это там же, где вы отключаете автоматическую сборку. Выберите обновить автоматически. Плагин с той же функциональностью - плагин Filesync от Андрея Лоскутова. Адрес сайта обновления: http://andrei.gmxhome.de/eclipse/ . Во время установки выберите Eclipse 3.5-3.7 plugins> FileSync.


4

Учитывая, что в Java 7 есть API для хуков файловой системы, можно подумать, что в Eclipse обновление может быть лучше обработано.

Изменить: На самом деле, есть плагин, который использует этот механизм: https://github.com/psxpaul/EclipseJava7Refresher


Спасибо за плагин. Без этого мой Eclipse в Ubuntu не видит внешних изменений файлов, даже когда «Window-> Preferences-> General-> Workspace-> Refresh with native hooks или polling» включен.
Руслан Стельмаченко

3

Возможно, вам следует добавить запрос функции на сайте Eclipse:

https://bugs.eclipse.org/bugs/

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


3

Глобальное обновление действительно отсутствует в Eclipse. Описанная выше процедура с выбором всех проектов и последующим выполнением обновления (например, F5) не работает, если вы закрыли проекты, включенные в ваш выбор. Это означает, что если вы закрыли половину из многих своих проектов, как и я, вы вручную нажимаете Ctrl, просматривая десятки проектов. Это довольно больно. Я бы хотел, чтобы Eclipse просто игнорировал закрытые проекты.


3

Глобальное обновление фактически существует в простом Eclipse без каких-либо плагинов и без выбора каждого проекта в вашей рабочей области.

По сути, вам нужно отменить выбор всего в проводнике проекта и нажать F5. Для этого нажмите Ctrl + клик по выбранному ресурсу в проводнике проекта и нажмите F5.


2

Да, обновление при доступе давно назрело ... в этих ответах и ​​подобных запросах обычно предлагалось включить глобальное автоматическое обновление, что может занять много времени для крупных удаленных проектов. На самом деле есть те, кто сказал бы, что обновление при доступе должно было быть исходным (<3.x) поведением по умолчанию ...


2

Мне удалось решить эту проблему путем создания новой конфигурации запуска «внешнего инструмента», которая выполняет пустой пакетный файл. В конфигурации конфигурации вы можете обновить рабочую область после завершения. Затем я создал макрос с использованием Practical Macro, который 1) выполняет последнюю настройку запуска внешнего инструмента (обновляет рабочее пространство), затем 2) выполняет последнюю конфигурацию запуска отладки (работает мое приложение). Если вы снимите флажок «Выделить консоль», то заполненная запись внешнего инструмента не будет отображаться в окне отладки.


1

Даже если решения, предложенные другими разработчиками, действительно верны, у вас есть плагин « Обновить все » для Eclipse. Просто добавьте страницу обновления в список сайтов обновлений Eclipse, чтобы установить ее в своей среде IDE.


2
Я получаю 404, когда нажимаю на эти ссылки. Проект еще жив?
Эран Харел

1
Действительно, этот проект кажется мертвым :(
Ромен Линсолас

1

Для запуска есть возможность автоматически обновлять файлы в

Window -> Preferences -> General -> Startup and Shutdown -> Refresh workspace on startup

Нажмите на нее, чтобы начать «новое» затмение. :)

Версия: Eclipse 4.12

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.