Я реализовал это, и это работает в большинстве случаев. Поскольку он длинный, я поместил его в файл здесь .
Идея состоит в том, чтобы найти местоположение исходного файла класса, который доступен в большинстве случаев (насколько я тестировал, известным исключением являются файлы классов JVM). Если код находится в каталоге, просмотрите все файлы и только файлы спот-классов. Если код находится в файле JAR, отсканируйте все записи.
Этот метод можно использовать только когда:
У вас есть класс, который находится в том же пакете, который вы хотите обнаружить. Этот класс называется SeedClass. Например, если вы хотите перечислить все классы в java.io, начальный класс может быть java.io.File
.
Ваши классы находятся в каталоге или в файле JAR, в котором есть информация об исходном файле (не файл исходного кода, а просто исходный файл). Насколько я пытался, он работает почти на 100%, за исключением класса JVM (эти классы поставляются с JVM).
Ваша программа должна иметь разрешение на доступ к ProtectionDomain этих классов. Если ваша программа загружена локально, проблем не должно быть.
Я тестировал программу только для своего регулярного использования, поэтому она все еще может иметь проблемы.
Надеюсь, это поможет.