Моей первой мыслью было, что вы можете сделать это, используя загрузчик классов, чтобы перебрать все файлы классов в банке и использовать отражение, чтобы проанализировать каждый из них на предмет их зависимостей.Однако класс Class не имеет метода, который сообщает вам эту информацию.Поэтому следующая мысль будет заключаться в том, чтобы использовать какой-то анализатор байт-кода (например, asm ), чтобы извлечь все ссылочные классы из класса компиляции.
Если предположить, что вы сможете получить эту информацию, следующая проблема будет заключаться в обратном отслеживании классов до jar-файлов.В некотором смысле это было бы легко, потому что все, что вам нужно было бы сделать, это создать загрузчик классов для каждого jar-файла в вашем репозитории maven, или каталога, или где бы они ни были, а затем спросить каждого из них по очереди, содержит ли он определенный класс.
Недостаток этого мышления заключается в том, что класс Java (исходный код или скомпилированный) не детализирует, откуда взять импортированный класс.Поэтому, если у вас есть два класса с одинаковым пакетом и именем (это происходит чаще, чем вы думаете), то вы не сможете определить, какой из них использовать.
Даже Java просто предполагает, что первый, который он находит в пути к классам, является правильным и выдает исключение, если оно оказывается неправильным (MethodNotFoundException).Поэтому, если вы не собираетесь дополнительно анализировать байт-код, чтобы выяснить, какие методы каждого класса вызываются, а затем сравнить их с классами в вашем пути к классам, вы все равно не сможете быть корректными.
INКороче говоря, возможно, можно делать то, что вы хотите, но, вероятно, это будет очень сложно и отнимает много времени.
Обычно я имею дело с этим, просто запустив класс в тестовом коде и продолжая добавлять зависимости, пока яможет заставить его выполнять любой интересующий меня метод.