Любой Java программист когда – либо думал об этом.
Мне известно несколько способов.
Во первых есть проприетарные утилиты для таких преобразований.
Во вторых есть gcj. Не знаю, на сколько он работоспособен в данный момент, но для консольных программ вполне должен подойти.
А еще есть oss.readytalk.com/avian/, сейчас читал на хабре статью, о том, как без помощи магии и бубна, этой прогой, можно собрать бинарник, который будет работать на компе не имеющем jre, под любой ОС.
При этом файл будет небольшого размера (порядка нескольких мегабайт).
http://habrahabr.ru/post/176237/
Осторожно, очень много букаф!