Запуск додатків на java
Як ми з вами раніше вже з'ясовували, під JVM можна писати цілком собі пристойні десктопні програми. Тут, треба визнати, виникають і деякі тонкощі, наприклад, якщо вам захочеться відобразити іконку в треї. На щастя, тонкощі проявляються лише під Linux. Зрештою, хто ж у наш час користується на робочому столі Linux, пфф ... Втім, абоненти найпопулярнішої деськтопной ОС зіткнуться з іншою проблемою, а саме необхідністю встановлювати якусь там ЖеВеЕм. А вона незрозуміло де мешкає, важить дофіга, а після установки потім ще в треї зависає, оновлень якихось хоче, каламутна штука! Однак користувачів можна змусити страждати трохи менше звичайного, і далі буде показано, як.
Секрет, як ви вже могли здогадатися, полягає в тому, щоб вбудувати JVM в сам додаток. Отримати таку «вбудовану» JVM можна декількома способами. Наприклад, в цій замітці розповідається, як зібрати її своїми силами з JVM з сайту Oracle. А за цим посиланням доступна для скачування готова збірка, називається jPortable. Про останню ніби як скрізь дуже добре відгукуються, нею і скористаємося.
Розпаковуємо, все каталоги крім bin і lib ніби як можна сміливо видалити. Поруч c каталогом bin кладемо standalone jar-ник з нашим додатком. Для експериментів я використовував jar'нік, зібраний з проекту до замітці Короткий огляд GUI-фреймворків для Java і моє перше простеньке GUI-додаток на Swing. Поруч кладемо run.bat нехитрого змісту:
@echo off
bin \ java.exe -jar swing-look-and-feel-switcher.jar
@echo on
Запускаємо і, о диво, все працює! У реальному проекті замість bat-файлу ви, швидше за все, захочете написати свій невеликий exe-лаунчер з красивою ікнокой або створити ярлик на робочому столі. Ярлик краще, так як, наскільки я пам'ятаю, деякі антивіруси і фаєрволи обожнюють показувати страшні повідомлення у випадках, коли одна програма (ваш лаунчер) запускає іншу (java.exe).
Будучи упакованим в саморозпаковується 7-zip архів з максимальною ступінь стиснення все це господарство важить 32 Мб. Забагато, прямо скажемо, але і не так, щоб неймовірно багато. В наші дні користувачі і не стільки качають. В крайньому випадку ви можете спробувати викинути зайві файли з каталогів bin і lib, але в цьому випадку потрібно добре розуміти, що ви робите. Мені здається, якщо ви пишете досить серйозне додаток, воно й саме по собі буде важити чимало. Користувачеві немає особливої різниці, качати 100 Мб або 132 Мб, особливо, якщо програма вирішує дійсно актуальну для нього завдання. Для порівняння, архів з IntelliJ IDEA 14.1 важить 183 Мб, і всім нормально.
В рамках порушеної теми не можна також не відзначити існування рішень, що дозволяють отримувати з Java-коду нативні додатки, взагалі не потребують ніякої JVM. Зокрема, є така цікава штука під назвою Excelsior JET. але ціна у неї досить кусюча. Спеціально для розробки під iOS є рішення під назвою RoboVM.
А вставала чи перед вами завдання вбудовувати JVM в ваш додаток і якщо так, то яким чином ви її вирішували? І до речі, чи не знає хто-небудь, наскільки ліцензія JVM взагалі дозволяє таке використання віртуальної машини, зокрема, в комерційних проектах?