Восстановление удаленного файла класса в Eclipse - PullRequest
5 голосов
/ 07 сентября 2011

Я случайно удалил файл .class (Java bytecode) в моем проекте (в файловой системе, не используя сам Eclipse). Легко исправить, верно? Просто восстановите его. Но это не работает! Даже если я выберу «Построить проект» или «Построить все» или «Построить автоматически» из меню «Проект», в файловой системе ничего не произойдет, и я все равно получу:

Exception in thread "main" java.lang.NoClassDefFoundError

Я просто хочу перекомпилировать это из исходного кода, который у меня уже есть!

Кстати, когда я выбираю «Очистить ...» в меню «Проект», Eclipse также не удаляет файлы. Я также попытался повторно импортировать проект в другую папку, но Eclipse просто копирует все файлы .class, и проблема сохраняется.

Ответы [ 5 ]

6 голосов
/ 23 апреля 2014

ОП ответил на свой вопрос в комментариях (2 с половиной года назад):

Нашел решение: другой проект, от которого зависел этот проект, не мог бытьскомпилирован, потому что он не может быть очищен, потому что Eclipse хотел удалить каталоги .svn по всему этому проекту (я понятия не имею, почему), и не смог, потому что некоторые файлы не имели разрешения на запись.Я был счастлив стереть все данные .svn просто чтобы это заработало!Спасибо за подсказку.- user690075 Sep 7 '11 в 1:25


В отношении вознаграждения

Этот вопрос не получил достаточного внимания.

Эта проблема тратит впустую часы моего времени.

Если ответ ОП не решил вашу проблему, вам следует задать более конкретный вопрос в новом сообщении, описывающем, что выВы пытались, и как решение OP не решило вашу конкретную проблему.

При этом, если вы попробовали решение, опубликованное OP, возможно, возникла другая проблема (которая не была вызвана удалениемфайл класса) вызывает ту же ошибку.Поскольку вы начали вознаграждение за чужой вопрос и не можете вернуть себе престиж, я подумал, что было бы уместно упомянуть, что, возможно, стоит потратить время на то, чтобы убедиться, что ваши версии JDK совместимы между старым или внешним используемым исходным кодомв вашем проекте.Вы получите ту же ошибку NoClassDefFoundError, когда компилятор достигнет точки в вашем коде, которая ссылается на объект / класс, определенный в библиотеке, разработанной на несовместимом JDK, в нем отсутствуют ключевые внутренние зависимости, которые не найдены в вашем JDKверсия.

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

2 голосов
/ 21 апреля 2014

Выполните полную очистку

1) Найдите и удалите папку .eclipse (вы можете сначала создать их резервную копию)

2) Удалить связанные .class files

3) Если есть какие-либо папки .svn , удалите их либо вручную, либо через svn-клиент

4).это, но вручную выберите только сломанный проект и выполните clean (в случае наличия зависимостей)

Если это не удастся, вероятно, хорошая идея упаковать ваш исходный кодкоды и реимпорт как новый проект.Это может избежать потери времени на возможную ошибку IDE

2 голосов
/ 23 апреля 2014

На более традиционных языках программы загружаются одновременно как часть процесса запуска.У Java нет этой проблемы, потому что она использует другой подход к загрузке.Это одно из действий, которые становятся проще, потому что все в Java является объектом.Помните, что скомпилированный код для каждого класса существует в отдельном файле. Этот файл не загружается до тех пор, пока не понадобится код. В общем, вы можете сказать, что «код класса загружается в точке первого использования». Обычно это происходит, когда создается первый объект этого класса., но загрузка также происходит при обращении к статическому полю или статическому методу.

Если вы не можете восстановить из локальной истории .Тогда вам не повезло.Используйте инструменты управления исходным кодом, такие как SVN или Git, чтобы избежать подобных неожиданностей в следующий раз.

Если у вас есть исходный файл, попробуйте скомпилировать файл вместе с зависимостями только в консоли или другой IDE и скопировать этот файл класса, чтобы ошибки могли быть ошибками. Теперь отредактируйте исходный файл в eclipse, попробуйте собрать снова.Надеюсь, это не сработает, потому что даже Eclipse будет игнорировать перекомпиляцию некоторых файлов при сборке Project.Лучше попробуй.

1 голос
/ 25 апреля 2014

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

1 голос
/ 19 апреля 2014

Вы уверены, что этот исходный файл находится в исходном наборе вашего проекта? Потому что в этом случае Eclipse будет только компилировать и помещать его в ваш путь к классам. Щелкните правой кнопкой мыши проект в Package Explorer , Свойства -> Путь сборки Java -> Источник . В нем должна быть вложенная папка, иначе Eclipse не скомпилирует ее.

В случае, скажем, этот ваш исходный файл был когда-то в наборе исходных кодов и был скомпилирован, что могло бы объяснить, почему он работал, пока вы не удалили двоичный файл.

Чтобы этой проблемы не было, я предлагаю иметь Очистить выходные папки при выборе проектов , выбранных в Java -> Компилятор -> Сборка и Автоматическая сборка .. . в меню «Проект».

Также убедитесь, что компиляция / сборка вашего проекта выполнена успешно, иначе Eclipse может не скомпилировать все классы.

Если это по-прежнему не помогает, может быть важно, с каким типом проекта у вас возникли проблемы: Java Project, Maven Project, Gradle Project и т. Д.

...