В настоящее время мы находимся в процессе повторной скриптации всей нашей системы сборки для большого проекта (около 2000 исходных файлов), и там говорилось о выполнении двоичного сравнения файлов, чтобы убедиться, что все правильно, что приводит к следующий вопрос: Является ли вывод javac
гарантией того, что он будет одинаковым для компиляций, или он может быть изменен?Является ли файл классов, созданный javac, неизменным?
Another question предполагает, что константа бассейн может иметь различный порядок, но при условии, что мы в состоянии контролировать для заказа файлов, идущих в javac
вызова есть еще потенциал для различия? Мы используем Ant и Maven как часть сборки, если это может повлиять и на вещи.
Не гарантируется. На практике это, вероятно, будет идентичным, если вы используете идентичную структуру JAR для компилятора и компиляции, но даже незначительные изменения в порядке JAR и т. Д. Могут нарушить работу applecart. –
Разве ваши тесты не гарантировали бы * функциональную * эквивалентность, что вас действительно беспокоит? В любом случае, почему бы просто не попробовать и не посмотреть, что происходит? Если вы обнаружите, что материал был переупорядочен, вам придется пройти и выполнить анализ байтового кода, чтобы убедиться, что они эквивалентны в байтах. –
Действительно интересно, зачем вам нужно бинарное сравнение построенных классов? –