ClassNotFoundException после рефакторинга сериализованного объекта Eclipse - PullRequest
1 голос
/ 06 марта 2012

У меня есть сериализуемый класс (CardGame), с которым я работаю в Eclipse, и изначально я поместил его в пакет (x.cardlib). Я переименовал пакет в y.cards.models, используя утилиту рефакторинга Eclipse (теперь, когда я знаю, как правильно назвать пакет).

Я написал новый класс (CardGameDatabase), который загружает и преобразует сериализованные CardGames из базы данных, и позже написал для него новый контрольный пример JUnit (CardGameDatabaseTest). Я попытался запустить свой тестовый пример и получил следующую ошибку:

java.lang.ClassNotFoundException: x.cardlib.CardGame
at y.cards.database.CardGameDatabase.getGame(CardGameDatabase.java:28)
at y.tests.CardGameDatabaseTest.test(CardGameDatabaseTest.java:13)

Я решил, что в моем коде все еще должна быть ссылка на старый пакет, поэтому я выполнил поиск по всему проекту любых ссылок на старый пакет (например, "import x.cardlib.CardGame"). Я не нашел ни одного.

Затем я удалил весь скомпилированный код и запустил утилиту очистки Eclipse, думая, что, возможно, в ранее скомпилированном коде существовала старая ссылка. Я все еще получаю сообщение об ошибке.

(Хм, я понял это во время написания, на самом деле. Я скоро опубликую ответ, если у кого-то еще возникла такая проблема.)

1 Ответ

1 голос
/ 07 марта 2012

Ответ: Я сохранил CardGame в своей базе данных, прежде чем рефакторинг своего кода. После загрузки объекта из базы данных он все еще назывался x.cardlib.CardGame в базе данных. Короче говоря, переименование пакета нарушило мою сериализацию, что привело к исключению ClassNotFoundException.

...