В произвольном порядке:
2 - Есть продукты, которые выполняют обфускацию. Обычно они переименовывают классы / переменные / методы в одно буквенные имена. Это затрудняет определение ошибок, о которых сообщают пользователи. Следы стека, показывающие, что исключение происходит в a.b.c, не особенно полезны.
1,3,4 - Вы не можете полностью избежать этого риска, если вы распространяете Java. Ваш код должен быть распакован и загружен в какой-то момент. Если кто-то заменит rt.jar в jvm, он может заменить загрузчик классов верхнего уровня и выгрузить ваши классы таким образом. Запутывание делает это менее полезным для них, но смотрите вышеупомянутое предостережение.
5 - Распространение "частного jre". По сути, у вас есть jre в папке с вашей программой. Ваш скрипт запуска запускает его. Увеличивает размер вашего дистрибутива.
6 - В Windows это может быть проблема с сопоставлением файлов. Но это также повлияет на все другие файлы JAR. Если только вы не являетесь частью 4 (однако вам это удается), вы также используете другое расширение. Не уверен насчет других операционных систем.
7 - Использовать Java Web Start? В противном случае просто поместите файл на свой сервер с последней версией, загрузите файл и сравните с установленной версией.
Для 1,2,4 и 5 вы также можете посмотреть компиляцию в нативный код, используя gcj или аналогичный. Остерегайтесь проблем совместимости, если вы делаете это, хотя.