Будьте осторожны при этом - я рекомендую не делать этого вообще.
Самая большая проблема - это общедоступные статические переменные. Они на самом деле скомпилированы в цель, а не ссылки. Это означает, что даже если файл Java не изменяется, класс должен быть перекомпилирован, иначе вы все равно будете ссылаться на старое значение.
Вы также хотите быть очень осторожными при изменении сигнатур методов - вы получите некоторые очень тонкие ошибки, если вы измените сигнатуру метода и не перекомпилируете все файлы, которые вызывают этот метод - даже если вызывающие файлы Java этого не делают на самом деле нужно изменить (например, изменить параметр с int на long).
Если вы решите пойти по этому пути, будьте готовы к некоторым действительно трудным для устранения ошибок (как правило, никаких следов или существенных признаков, просто странное поведение, такое как полученное число, не совпадающее с отправленным) на сайте клиента, которое вы не можете дублировать и много разозленных клиентов.
Редактировать (слишком долго для комментария):
Бинарная разность файлов классов может работать, но я предполагаю, что компилируется какой-то номер версии или дата и что они будут немного меняться при каждой компиляции без причины, но это можно легко протестировать.
Вы могли бы применить некоторые строгие методы разработки, не используя public final statics (сделать их приватными), а не подписи каждого изменяющегося метода (deprecate вместо), но я не уверен, что знаю все возможные проблемы, я просто знаю те, с которыми мы столкнулись.
Также двоичные различия в файлах Jar были бы бесполезны, вам нужно было бы преобразовать классы и заново интегрировать их в банки (это не легко отследить)
Можете ли вы упаковать свои ресурсы отдельно, а затем немного уменьшить код? Вытащить строки (хорошо для i18n) - я думаю, мне просто интересно, можете ли вы урезать файлы классов настолько, чтобы всегда делать полную сборку / доставку.
С другой стороны, Sun, похоже, делает хорошую работу по созданию файлов классов, которые полностью совместимы с предыдущим выпуском JRE, поэтому у них где-то должны быть указания.