В Eclipse и классе загружается, который не должен быть возможным. В режиме отладки я могу приостановить его и видеть вызов к классу a.b.c, НО a.b.c класс должен существовать где угодно, так как это было переименовано. Мое предположение - то, что существует старый файл банки, называемый..., но я не могу найти его. Таким образом, как я нахожу файл банки, что класс a.b.c находится в в то время как в режиме отладки в затмении? Или через пункт меню затмения или через Java и использование отражения для получения объекта сказать мне его собственный файл банки.
Спасибо.
Вы можете использовать загрузчик класса для получения URL ресурса. Это также работает для классов. Для получения местоположения класса java.lang.String
:
X.class.getClassLoader().getResource("java/lang/String.class");
Выход:
jar:file:/C:/Program%20Files/Java/jdk1.6.0_17/jre/lib/rt.jar!/java/lang/String.class
Если вы запустите ваш JVM с помощью -verbose:class (вы можете установить это как JVM опцию в Eclipse), вы можете точно увидеть, какие классы загружаются когда, и я думаю откуда.
. Существует ряд обстоятельств, при которых скомпилированный файл .class
остается доступным для Eclipse (и его JVM), хотя вы удалили или переименовали источник.
Чтобы убедиться, что это не обманывает вас, вы можете либо запустить Project|Clean
в Eclipse, либо просто зайти в вид Navigator и удалить каталог классов (стандартный вариант - bin
), а затем позволить Eclipse перестроить его.
Ты можешь "F3" (открыть класс)? Даже если он не декомпилирует, он должен показать вам jar-файл
. Если где-то есть старая банка, вы можете попросить JAR Class Finder найти ее, указав класс, который вы ищете.
.
Это независимый (т.е. не требующий дополнительного кода) способ найти эту банку.
Вы также можете использовать диалоговое окно «Открыть тип» ( Ctrl + Shift + T
). Введите имя класса, и если Eclipse его найдет, он покажет банку (ы), из которой он пришел.
Обратите внимание, однако, что путь к классам, который видит Eclipse, не обязательно идентичен пути к классам во время выполнения.
Спасибо за помощь, решением от Томаса Юнга было:
X.class.getClassLoader().getResource("java/lang/String.class");
.