Java jest jednym z moich ulubionych języków programowania. Jednak zawsze napotykam problem z dystrybucją mojej aplikacji do użytkowników końcowych.
Udostępnienie użytkownikowi pliku JAR nie zawsze jest tak przyjazne dla użytkownika, jak bym chciał, a korzystanie z Java WebStart wymaga utrzymania serwera WWW.
Jaki jest najlepszy sposób dystrybucji aplikacji Java? Co się stanie, jeśli aplikacja Java musi zainstalować artefakty na komputerze użytkownika? Czy są dostępne dobre systemy instalacji / pakowania Java?
java
installer
jar
software-distribution
Laplie Anderson
źródło
źródło
Odpowiedzi:
Istnieje wiele rozwiązań w zależności od wymagań dotyczących dystrybucji.
Po prostu użyj słoika. Zakłada się, że użytkownik ma zainstalowaną poprawną wersję Java, w przeciwnym razie użytkownik otrzyma wyjątki „wersja formatu pliku klasy”. Jest to dobre w przypadku dystrybucji wewnętrznej w firmie.
Użyj launch4j i instalatora, takiego jak NSIS. Daje to dużo większą kontrolę, chociaż użytkownik nadal może robić głupie rzeczy, takie jak odinstalowanie środowiska wykonawczego java. Jest to prawdopodobnie najpopularniejsze podejście i obecnie używam.
Użyj Webstart. Zakłada się również, że użytkownik ma zainstalowaną poprawną wersję Java, ale znacznie łatwiej jest zacząć. Z mojego doświadczenia wynika, że jest to dobre w ściśle kontrolowanych środowiskach intranetowych, ale staje się uciążliwe przy większych wdrożeniach, ponieważ ma wiele dziwnych awarii. Może być lepiej dzięki nowej technologii wtyczek w Javie 1.7.
Użyj kompilatora kodu natywnego, takiego jak Excelsior JET i rozpowszechnij jako plik wykonywalny lub zapakuj go w instalator. Drogie i generalnie wiąże cię z nieco starszą wersją javy, a dynamiczne ładowanie klas jest trochę uciążliwe, ale jest bardzo skuteczne w przypadku wdrażania na dużą skalę, gdzie musisz zminimalizować problemy z obsługą.
źródło
zaawansowany instalator ułatwia pakowanie aplikacji Java jako plików wykonywalnych systemu Windows i jest dość elastyczny w sposobie konfiguracji. Odkryłem, że jest to najłatwiejsza droga do dystrybucji aplikacji Java do klientów Windows.
źródło
JSmooth to prosty program, który pobiera plik jar i pakuje go w standardowy plik wykonywalny systemu Windows. Jest dostarczany z prostym GUI, który pozwala skonfigurować wymaganą maszynę JVM, dołączyć ją do aplikacji lub udostępnić opcję jej pobrania, jeśli nie jest jeszcze zainstalowana. Możesz wysłać plik exe bez zmian lub spakować go z możliwymi zależnościami (lub pozwolić programowi pobrać dodatkowe zależności z sieci podczas uruchamiania). Jest również darmowy, jak w przypadku piwa i mowy, co może (ale nie musi) być dobrą rzeczą.
źródło
To zależy od tego, jak wyrafinowani są Twoi docelowi użytkownicy. W większości przypadków chcesz je odizolować od faktu, że używasz aplikacji opartej na języku Java. Daj im natywny instalator, który robi właściwe rzeczy (tworzy pozycje menu startowego, programy uruchamiające, rejestruje się za pomocą dodawania / usuwania programów itp.) I już zawiera pakiet środowiska wykonawczego Java (więc użytkownik nie musi o tym wiedzieć ani o to dbać). Chciałbym zasugerować nasze wieloplatformowe narzędzie do instalacji, BitRock InstallBuilder. Chociaż nie jest oparty na języku Java, jest powszechnie używany do pakowania aplikacji Java. Można go łatwo zintegrować z Ant i możesz budować instalatory Windows z Unix / Linux / Mac i odwrotnie. Ponieważ generowane instalatory są natywne, nie wymagają kroku samorozpakowania ani obecności środowiska JRE w systemie docelowym, co oznacza mniejsze instalatory i pozwala zaoszczędzić trochę bólu głowy. Chciałbym również wspomnieć, że mamy wolne licencje na projekty open source
źródło
Pliki wykonywalne są najlepsze, ale są ograniczone do platformy, tj. użyj gcj: http://gcc.gnu.org/java/ dla linuxa do tworzenia plików wykonywalnych i użyj launch4j: http://launch4j.sourceforge.net/ do tworzenia plików wykonywalnych Windows. Aby spakować na Linuksie, możesz użyć dowolnego programu pakującego rpm lub deb. W przypadku win32 spróbuj http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System
źródło
Jeśli jest to aplikacja użytkownika końcowego z prawdziwym GUI, należy zignorować język, w którym napisałeś program (Java) i użyć natywnego instalatora dla każdej wybranej platformy. Użytkownicy komputerów Mac chcą mieć plik .dmg, a w systemie Windows instalator .msi lub .exe to najlepsza droga. W systemie Windows wolę NSIS od NullSoft tylko dlatego, że jest mniej kontrowersyjny niż InstallShield lub InstallAnywhere. Na OSX możesz liczyć na to, że JVM już tam jest. W systemie Windows musisz to sprawdzić i zainstalować, jeśli to konieczne. Użytkownicy Linuksa nie będą uruchamiać aplikacji Java GUI, a nieliczni, którzy będą wiedzieli, co zrobić z wykonywalnym plikiem .jar.
źródło
Chociaż sam nie korzystałem z NSIS (Nullsoft Scriptable Installer System), istnieją skrypty instalacyjne, które sprawdzą, czy wymagane środowisko JRE jest zainstalowane w systemie docelowym.
Wiele przykładowych skryptów jest dostępnych na stronach z przykładami kodu i instalatorami w świecie rzeczywistym , takich jak:
(Pamiętaj, że w rzeczywistości nie użyłem żadnego ze skryptów, więc nie traktuj tego jako zachęty).
źródło
Potrzebowałem sposobu na spakowanie mojego projektu i jego zależności w jednym pliku jar.
Znalazłem to, czego potrzebowałem, używając wtyczki Maven2 Assembly : wtyczka Maven2 Assembly
Wydaje się, że powiela to funkcjonalność jednego słoika , ale nie wymaga dodatkowej konfiguracji, aby go uruchomić.
źródło
W przypadku prostych aplikacji Java lubię używać Jar's. Dystrybucja jednego pliku, który użytkownik może po prostu kliknąć (Windows) lub
IMHO, słoik to najlepszy wybór, gdy prostota jest głównym wymaganiem.
źródło
Tworzę aplikacje eclipse RCP. Zwykle do uruchomienia aplikacji zaćmienia jest dołączony wykonywalny program uruchamiający. Umieszczam maszynę wirtualną java w folderze aplikacji w podkatalogu / jre, aby upewnić się, że zostanie użyta odpowiednia wersja Java.
Następnie pakujemy z Inno Setup do instalacji na komputerze użytkownika.
źródło
Z mojego doświadczenia (z oceny wielu opcji ) wynika , że install4j jest dobrym rozwiązaniem. Tworzy natywne instalatory dla dowolnej platformy i jest specjalnie przystosowany do instalowania aplikacji Java. Aby uzyskać szczegółowe informacje, zobacz „ Funkcje ” w jej witrynie internetowej.
Jednak install4j jest narzędziem komercyjnym. Zwłaszcza jeśli Twoje potrzeby są stosunkowo proste (wystarczy rozprowadzić aplikację i zainstalować jakieś artefakty), istnieje wiele innych dobrych opcji, w tym darmowe (jak izPack lub wspomniany już Lauch4j ). Ale prosiłeś o najlepsze sposób i, o ile wiem, install4j jest tym, szczególnie do dystrybucji większych lub bardziej skomplikowanych aplikacji Java (EE).
źródło
Najlepsza odpowiedź zależy od platformy. W przypadku wdrażania w systemie Windows osiągnąłem dobre wyniki przy użyciu kombinacji one-jar i launch4j . Prawidłowe skonfigurowanie środowiska kompilacji zajęło trochę czasu (głównie skrypty Ant), ale teraz jest to dość bezbolesne.
źródło
Cóż, z mojego punktu widzenia lepszy mechanizm dystrybucji polega na użyciu czegoś w rodzaju technologii ClickOnce lub WebStart . Po prostu wdrażasz wersję na serwerze i jest ona automatycznie przekazywana klientom po wydaniu wersji. Również platforma Eclipse RCP zawiera UpdateManager, który robi to, co robi WebStart, ale także znacznie więcej.
Ponieważ używam Maven2 do budowania, wdrożenie jest tylko bułką z masłem: skopiuj zbudowany jar do lokalizacji na serwerze, zaktualizuj plik jnlp w razie potrzeby i gotowe.
źródło
installanywhere jest dobry, ale drogi - nie znalazłem (jako) dobrego darmowego
źródło
Spakowałbym plik jar wraz z innymi zależnymi plikami JAR, plikami konfiguracyjnymi i dokumentacją wraz z plikiem run.bat / run.sh. Użytkownik końcowy powinien mieć możliwość rozpakowania go do dowolnej lokalizacji i edycji pliku run.bat w razie potrzeby (w większości przypadków powinien działać bez edycji). Instalator może być przydatny, jeśli chcesz tworzyć wpisy w menu Start, na pulpicie, w zasobniku systemowym itp.
Jako użytkownik wolę rozpakować i uruchomić rodzaj instalacji (bez wpisów w menu startowym). Jednak osoby spoza branży IT mogą mieć różne preferencje. Więc jeśli aplikacja jest w dużej mierze przeznaczona dla programistów zip-run.bat route i aplikacje dla ogółu społeczeństwa mogą być instalowane za pomocą instalatora.
źródło