IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Multiplatformový spustenie Java aplikácií

V tomto tutoriále si predstavíme spôsob, ako vylepšiť spustenie Java aplikácií.

Motivácia

Pokiaľ si aplikáciu píšete len pre seba, tak sa jej spustením nemusíte vôbec zaťažovať. V opačnom prípade, ak nepoužijete nejaký spúšťací skript a užívateľ nemá nainštalovanú Javu, tak sa mu vaša aplikácia môže pokojne otvoriť ako archív. To nie je práve žiaduce stav. So skriptom sa vám to nestane. Tiež môžete zaistiť, že sa používateľom aplikácie spustí s prepínačmi (napríklad pre kódovanie), ktoré potrebujete. Ako však vyriešiť, aby jediný skript fungoval na Windows i Linuxe?

Najprv si predvedieme jednoduchý skript, ktorý pustí jar súbor na Windows i na Linuxe. Pomocou hack nám bude naozaj stačiť pre oba operačné systémy jediný súbor. Popíšeme si, ako sa dá rozšíriť, a nakoniec je zaradený aj generátor tohto skriptu.

Poznámka: pôvodnej verzii skript vymyslel môj kolega a článok vznikol s jeho láskavým dovolením. Originál nájdete tu: github.com

Skript

Ako pravdepodobne viete, skripty pre Windows a Linux sa značne líšia. Ako teda urobiť univerzálny skript pre oba operačné systémy? Pozor si musíme dať najmä na konce riadkov, kde na Windows používame sekvenciu znakov \r\n a na Linuxe iba \n. V nasledujúcej ukážke je najjednoduchšia verzia skriptu bez ďalších rozšírení. Prázdne riadky v ukážke sú len pre čitateľnosť:

#!/bin/bash\n\r\n
GOTO Windows\r\n

# Linux\n
java -jar ./file-name.jar\n
exit\n\r\n

:Windows\r\n
start javaw -jar ./file-name.jar\r\n
exit

V predchádzajúcej ukážke sme pre názornosť uviedli aj znaky pre nový riadok, ktoré by normálne neboli vidieť. V ďalších ukážkach je už uvádzať nebudeme. Proste všetko, čo bude medzi # Linux a exit, respektíve medzi :Windows a exit, bude končiť rovnakým typom konca riadku, akým končí predchádzajúci riadok.

Ako skript spracuje Windows

Príkazový riadok Windows príde na prvý riadok, ten nevie vykonať, tak prejde na druhý. Tomu už rozumie a vykoná ho. Tým preskočí časť pre Linux a pustí vybraný jar. Následne zavrie okno príkazového riadku.

Ako skript spracuje Linux

Tu terminál vie spracovať prvý riadok, ale u druhého vypíše chybu a prejde na tretí. Potom spustí daný jar a terminál zavrie.

Rozšírenie

Skript môžeme pre maximálne pohodlie nášho užívateľa ešte rozšíriť.

Znaková sada a ostatné prepínače

Nasledujúce rozšírenie skriptu o nastavení znakovej sady oceníte obzvlášť, ak používate v aplikácii slovenčinu: -Dfile.encoding, najčastejšie -Dfile.encoding=UTF8. Použitie vo skriptu je nasledujúci:

#!/bin/bash
GOTO Windows

# Linux
java -Dfile.encoding -jar ./file-name.jar
exit

:Windows
start javaw -Dfile.encoding -jar ./file-name.jar
exit

Takto si môžete nastaviť všetky ďalšie prepínače. Ich zoznam nájdete pomocou java -help.

Nainštalovaná Java

Ako sme si už hovorili v úvode, nikdy neviete, na akom PC bude vaša aplikácia spustená a či tu bude nainštalovaná Java. Najprv sa teda zavolá príkaz pre vypísanie verzie Javy a ak je návratový kód 0 (všetko prebehlo bez problémov), je Java nainštalovaná. Ak nainštalovaná nie je, vypíše sa hláška "You must install java first".

#!/bin/bash
GOTO Windows

# Linux
java -version
if [ $? -eq 0 ]; then
    java -jar ./file-name.jar
else
    echo You must install java first
fi
exit

:Windows
java -version
IF %errorlevel% EQU 0 (
    start javaw -jar ./file-name.jar
) ELSE (
    echo You must install java first
)
exit

Vyššie uvedený skript samozrejme môžete značne vylepšiť, ak namiesto vypísanie hlášky pri neexistencii Javy vyvoláte nejaké modálne okno alebo spustíte vlastný skript pre inštaláciu Javy. Tiež môžete výsledok java -version parsovať a kontrolovať, či je nainštalovaná tá verzia Javy, ktorú potrebujete.

Generátor skriptu

Veľkou nevýhodou skriptu vyššie je, že málo textových editorov pre Windows vie napísať nový riadok Linuxu a opačne. Našťastie to Java môže urobiť za nás. Preto si teraz vytvoríme jednoduchý generátor tohto skriptu. Ako parameter bude brať meno .jar súboru:

package generator;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class RunnerGenerate {

    private String win = "\r\n";

    private String linux = "\n";

    public RunnerGenerate(final String jarFile) {
        try(BufferedWriter br = new BufferedWriter(new FileWriter("run.bat"))) {
            br.write(
                    "#!/bin/bash" + linux + win
                    + "GOTO Windows" + win

                    + "# Linux" + linux
                    + "java -version" + linux
                    + "if [ $? -eq 0 ]; then" + linux
                    + " java -Dfile.encoding=UTF8 -jar ./" + jarFile + linux
                    + "else" + linux
                    + " echo You must install java first" + linux
                    + "fi" + linux
                    + "exit" + linux + win

                    + ":Windows" + win
                    + "java -version" + win
                    + "IF %errorlevel% EQU 0 (" + win
                    + " start javaw -Dfile.encoding=UTF8 -jar ./" + jarFile + win
                    + ") ELSE (" + win
                    + " echo You must install java first" + win
                    + ")" + win
                     + "exit"
            );
            System.out.println("completed");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new RunnerGenerate(args[0]);
    }
}

Ako vidíte, generátor možno spustiť z príkazového riadku, kde pridáme parameter - meno vašej aplikácie. V prílohe je k dispozícii zdrojový kód tohto skriptu, vyexportovaný generátor a ešte jeden jar - test.jar, veľmi jednoduchá aplikácia na testovanie funkčnosti skriptu.

Ukážka použitia generátora

Použitie vyexportovaného generátora je pri použití jari z prílohy nasledujúce:

Linux

java -jar ./run_generator.jar test.jar

Windows

start javaw -jar ./run_generator.jar test.jar

Vytvorený súbor run.bat odporúčam needitovat v bežných editoroch. Ak výsledný skript na jednom os vyeditujete, editor vám pravdepodobne upraví aj konce riadkov a skript pravdepodobne (v závislosti na editore) nepôjde použiť na druhom OS.

Záverom

Pokiaľ budú užívatelia pre spúšťanie vašich Java aplikácií používať tento skript, znížite riziko problémov so znakovou sadou alebo problémov s nenainštalovanú Javou.

Ak by niekto z vás mal nápad na vylepšenie funkcionality ako napríklad rozlišovanie Windows, Linux a Mac, skripty pre parsovanie verzie Javy, skript pre vypísanie hlášky o neexistencii Javy alebo spustenie jej inštalácia, pošlite do komentárov odkaz alebo kód a ja ho včlenením do tohto článku .


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 8x (17.67 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java

 

Všetky články v sekcii
Java - Pre pokročilých
Článok pre vás napísal Ondřej Němec
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Aktivity