Szukaj…


Wprowadzenie

Istnieje wiele technologii „pakowania” aplikacji Java, aplikacji internetowych itp. W celu wdrożenia na platformie, na której będą działać. Obejmują one od prostych bibliotek lub wykonywalnych plików JAR plików WAR i EAR , po instalatory i samodzielne pliki wykonywalne.

Uwagi

Na najbardziej podstawowym poziomie program Java można wdrożyć, kopiując skompilowaną klasę (tj. Plik „.class”) lub drzewo katalogów zawierające skompilowane klasy. Jednak Java jest zwykle wdrażana na jeden z następujących sposobów:

  • Przez skopiowanie pliku JAR lub kolekcji plików JAR do systemu, w którym zostaną wykonane; np. używając javac .

  • Przez skopiowanie lub przesłanie pliku WAR, EAR lub podobnego pliku do „kontenera serwletu” lub „serwera aplikacji”.

  • Uruchamiając instalator aplikacji, który automatyzuje powyższe. Instalator może również zainstalować osadzone środowisko JRE.

  • Umieszczając pliki JAR aplikacji na serwerze WWW, aby umożliwić ich uruchomienie za pomocą Java WebStart.

Przykład tworzenia plików JAR, WAR i EAR podsumowuje różne sposoby tworzenia tych plików.

Istnieje wiele otwartych i komercyjnych narzędzi „generatora instalatora” i „generatora EXE” dla języka Java. Podobnie istnieją narzędzia do zaciemniania plików klasy Java (w celu utrudnienia inżynierii wstecznej) i dodawania sprawdzania licencji środowiska wykonawczego. Wszystko to jest poza zakresem dokumentacji „Java Programming Language”.

Tworzenie wykonywalnego pliku JAR z wiersza polecenia

Aby zrobić słoik, potrzebujesz jednego lub więcej plików klas. Powinna to być główna metoda, jeśli ma być uruchamiana podwójnym kliknięciem.

W tym przykładzie użyjemy:

import javax.swing.*;
import java.awt.Container;

public class HelloWorld {

    public static void main(String[] args) {
        JFrame f = new JFrame("Hello, World"); 
        JLabel label = new JLabel("Hello, World");
        Container cont = f.getContentPane();
        cont.add(label);
        f.setSize(400,100); 
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

}

Został nazwany HelloWorld.java

Następnie chcemy skompilować ten program.

Możesz użyć dowolnego programu, który chcesz to zrobić. Aby uruchomić z wiersza poleceń, zapoznaj się z dokumentacją dotyczącą kompilowania i uruchamiania pierwszego programu Java.

Po utworzeniu pliku HelloWorld.class utwórz nowy folder i nazwij go, jak chcesz.

Utwórz inny plik o nazwie manifest.txt i wklej do niego

Main-Class: HelloWorld
Class-Path: HelloWorld.jar

Umieść go w tym samym folderze z HelloWorld.class
Za pomocą wiersza polecenia ustaw bieżący katalog ( cd C:\Your\Folder\Path\Here w systemie Windows) jako folder.

Użyj terminalu i zmień katalog na katalog ( cd /Users/user/Documents/Java/jarfolder na Macu) twój folder

Po jar -cvfm HelloWorld.jar manifest.txt HelloWorld.class wpisz jar -cvfm HelloWorld.jar manifest.txt HelloWorld.class i naciśnij klawisz Enter. Spowoduje to utworzenie pliku jar (w folderze z manifestem i HelloWorld.class) przy użyciu określonych plików .class o nazwie HelloWorld.jar. Zobacz sekcję Składnia, aby uzyskać informacje o opcjach (takich jak -m i -v).
Po wykonaniu tych kroków przejdź do katalogu z plikiem manifestu i powinieneś znaleźć plik HelloWorld.jar
Kliknięcie go powinno wyświetlić tekst Hello, World w polu tekstowym.

Tworzenie plików JAR, WAR i EAR

Typy plików JAR, WAR i EAR są zasadniczo plikami ZIP z plikiem „manifest” i (dla plików WAR i EAR) określoną wewnętrzną strukturą katalogu / pliku.

Zalecanym sposobem tworzenia tych plików jest użycie narzędzia do budowania specyficznego dla języka Java, które „rozumie” wymagania dla odpowiednich typów plików. Jeśli nie korzystasz z narzędzia do kompilacji, następną opcją jest „eksport” IDE.

( Notka redakcyjna: opisy sposobu tworzenia tych plików najlepiej umieścić w dokumentacji odpowiednich narzędzi. Umieść je tam. Proszę pokazać powściągliwość i NIE rób klocków w tym przykładzie! )

Tworzenie plików JAR i WAR za pomocą Maven

Utworzenie JAR lub WAR za pomocą Maven polega na umieszczeniu poprawnego elementu <packaging> w pliku POM; na przykład,

<packaging>jar</packaging>

lub

<packaging>war</packaging>

Po więcej szczegółów. Maven można skonfigurować do tworzenia „wykonywalnych” plików JAR poprzez dodanie wymaganych informacji o klasie punktu wejścia i zależnościach zewnętrznych jako właściwości wtyczki dla wtyczki jar maven. Istnieje nawet wtyczka do tworzenia plików „uberJAR”, które łączą aplikację i jej zależności w jeden plik JAR.

Więcej informacji można znaleźć w dokumentacji Maven ( http://www.riptutorial.com/topic/898 ).

Tworzenie plików JAR, WAR i EAR za pomocą Ant

Narzędzie do budowania Anta ma osobne „zadania” do budowania JAR, WAR i EAR. Więcej informacji można znaleźć w dokumentacji Ant ( http://www.riptutorial.com/topic/4223 ).

Tworzenie plików JAR, WAR i EAR za pomocą IDE

Wszystkie trzy najpopularniejsze środowiska IDE Java mają wbudowaną obsługę tworzenia plików wdrażania. Funkcjonalność jest często opisywana jako „eksportowanie”.

Tworzenie plików JAR, WAR i EAR za pomocą komendy jar .

Można również utworzyć te pliki „ręcznie” za pomocą polecenia jar . Jest to po prostu kwestia złożenia drzewa plików z poprawnymi plikami składników w odpowiednim miejscu, utworzenia pliku manifestu i uruchomienia jar aby utworzyć plik JAR.

Więcej informacji można znaleźć w jar polecenia jar ( Tworzenie i modyfikowanie plików JAR )

Wprowadzenie do Java Web Start

Oracle Java Tutorials podsumowuje Web Start w następujący sposób:

Oprogramowanie Java Web Start umożliwia uruchamianie w pełni funkcjonalnych aplikacji jednym kliknięciem. Użytkownicy mogą pobierać i uruchamiać aplikacje, takie jak pełny arkusz kalkulacyjny lub klient czatu internetowego, bez konieczności przeprowadzania długich procedur instalacyjnych.

Inne zalety Java Web Start to obsługa podpisanego kodu i wyraźne deklarowanie zależności platformy oraz obsługa buforowania kodu i wdrażania aktualizacji aplikacji.

Java Web Start jest również nazywany JavaWS i JAWS. Głównymi źródłami informacji są:

Wymagania wstępne

Na wysokim poziomie Web Start działa poprzez dystrybucję aplikacji Java spakowanych jako pliki JAR ze zdalnego serwera WWW. Wymagania wstępne to:

  • Istniejąca instalacja Java (JRE lub JDK) na komputerze docelowym, na którym aplikacja ma być uruchomiona. Wymagana jest Java 1.2.2 lub nowsza:

    • Począwszy od Java 5.0, obsługa Web Start jest zawarta w JRE / JDK.
    • W przypadku wcześniejszych wersji obsługa Web Start jest instalowana osobno.
    • Infrastruktura Web Start zawiera Javascript, który może być zawarty na stronie internetowej, aby pomóc użytkownikowi w instalacji niezbędnego oprogramowania.
  • Serwer WWW obsługujący oprogramowanie musi być dostępny dla komputera docelowego.

  • Jeśli użytkownik zamierza uruchomić aplikację Web Start za pomocą łącza na stronie internetowej, wówczas:

    • potrzebują kompatybilnej przeglądarki internetowej i
    • w przypadku nowoczesnych (bezpiecznych) przeglądarek należy im powiedzieć, jak powiedzieć przeglądarce, aby zezwoliła na uruchamianie Javy ... bez narażania bezpieczeństwa przeglądarki.

Przykładowy plik JNLP

Poniższy przykład ilustruje podstawową funkcjonalność JNLP.

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="https://www.example.com/demo" 
    href="demo_webstart.jnlp">
    <information>
        <title>Demo</title>
        <vendor>The Example.com Team</vendor>
    </information>
    <resources>
        <!-- Application Resources -->
        <j2se version="1.7+" href="http://java.sun.com/products/autodl/j2se"/>
        <jar href="Demo.jar" main="true"/>
    </resources>
    <application-desc
         name="Demo Application"
         main-class="com.example.jwsdemo.Main"
         width="300"
         height="300">
     </application-desc>
     <update check="background"/>
</jnlp>    

Jak widać, plik JNLP oparty na XML, a wszystkie informacje zawarte są w elemencie <jnlp> .

  • Atrybut spec podaje wersję specyfikacji JNPL, z którą ten plik jest zgodny.
  • Atrybut codebase podaje podstawowy adres URL do rozwiązywania względnych adresów URL href w pozostałej części pliku.
  • Atrybut href podaje ostateczny adres URL tego pliku JNLP.
  • Element <information> zawiera metadane aplikacji, w tym jej tytuł, autorów, opis i witrynę pomocy.
  • Element <resources> opisuje zależności dla aplikacji, w tym wymaganą wersję Java, platformę systemu operacyjnego i pliki JAR.
  • Element <application-desc> (lub <applet-desc> ) zapewnia informacje potrzebne do uruchomienia aplikacji.

Konfigurowanie serwera WWW

Serwer WWW musi być skonfigurowany do używania application/x-java-jnlp-file jako MIMEtype dla plików .jnlp .

Plik JNLP i pliki JAR aplikacji muszą zostać zainstalowane na serwerze WWW, aby były dostępne przy użyciu adresów URL wskazanych w pliku JNLP.

Włączanie uruchamiania za pośrednictwem strony internetowej

Jeśli aplikacja ma zostać uruchomiona za pośrednictwem łącza internetowego, strona zawierająca łącze musi zostać utworzona na serwerze internetowym.

  • Jeśli możesz założyć, że Java Web Start jest już zainstalowany na komputerze użytkownika, wtedy strona internetowa musi zawierać link do uruchomienia aplikacji. Na przykład.

    <a href="https://www.example.com/demo_webstart.jnlp">Launch the application</a>
    
  • W przeciwnym razie strona powinna również zawierać skrypty wykrywające rodzaj przeglądarki, z której korzysta użytkownik, i poprosić o pobranie i zainstalowanie wymaganej wersji Java.

UWAGA: Nie jest dobrym pomysłem zachęcanie użytkowników do zachęcania do zainstalowania Java w ten sposób, a nawet do włączenia Java w swoich przeglądarkach internetowych, aby działało uruchamianie strony JNLP.

Uruchamianie aplikacji Web Start z wiersza polecenia

Instrukcje uruchamiania aplikacji Web Start z wiersza poleceń są proste. Zakładając, że użytkownik ma zainstalowaną JRE lub JDK Java 5.0, wystarczy uruchomić to:

$ javaws <url>

gdzie <url> to adres URL pliku JNLP na zdalnym serwerze.

Tworzenie UberJAR dla aplikacji i jej zależności

Częstym wymogiem dla aplikacji Java jest to, że można ją wdrożyć, kopiując pojedynczy plik. W przypadku prostych aplikacji, które zależą tylko od standardowych bibliotek klas Java SE, wymóg ten jest spełniony poprzez utworzenie pliku JAR zawierającego wszystkie (skompilowane) klasy aplikacji.

Sprawy nie są takie proste, jeśli aplikacja zależy od bibliotek stron trzecich. Jeśli po prostu umieścisz pliki JAR zależności w pliku JAR aplikacji, standardowy moduł ładujący klasy Java nie będzie w stanie znaleźć klas bibliotek i aplikacja się nie uruchomi. Zamiast tego należy utworzyć pojedynczy plik JAR, który zawiera klasy aplikacji i powiązane zasoby wraz z klasami zależności i zasobami. Muszą być one zorganizowane jako pojedyncza przestrzeń nazw dla przeszukiwacza klas.

Taki plik JAR jest często nazywany UberJAR.

Tworzenie UberJAR za pomocą polecenia „jar”

Procedura tworzenia UberJAR jest prosta. (Dla uproszczenia użyję poleceń Linuksa. Polecenia powinny być identyczne dla Mac OS i podobne dla Windows).

  1. Utwórz katalog tymczasowy i zmień katalog na ten.

    $ mkdir tempDir
    $ cd tempDir
    
  2. Dla każdego zależnego pliku JAR, w odwrotnej kolejności , w jakiej muszą się pojawić w ścieżce klasy aplikacji, użyłem polecenia jar do rozpakowania pliku JAR do katalogu tymczasowego.

    $ jar -xf <path/to/file.jar>
    

    Wykonanie tej czynności w przypadku wielu plików JAR spowoduje nałożenie zawartości plików JAR.

  3. Skopiuj klasy aplikacji z drzewa kompilacji do katalogu tymczasowego

    $ cp -r path/to/classes .
    
  4. Utwórz UberJAR z zawartości katalogu tymczasowego:

    $ jar -cf ../myApplication.jar
    

    Jeśli tworzysz wykonywalny plik JAR, dołącz odpowiedni plik MANIFEST.MF, jak opisano tutaj.

Tworzenie UberJAR za pomocą Maven

Jeśli Twój projekt został zbudowany przy użyciu Maven, możesz go utworzyć, aby utworzyć UberJAR za pomocą wtyczek „maven-assembly” lub „maven-shadow”. Aby uzyskać szczegółowe informacje, zobacz temat Montaż Maven (w dokumentacji Maven ).

Zalety i wady UberJAR

Niektóre zalety UberJAR są oczywiste:

  • UberJAR jest łatwy do dystrybucji.
  • Nie można zerwać zależności bibliotek dla UberJAR, ponieważ biblioteki są samodzielne.

Ponadto, jeśli użyjesz odpowiedniego oprzyrządowania, aby utworzyć UberJAR, będziesz mieć możliwość wykluczenia klas bibliotek, które nie są używane z pliku JAR. Jednak zwykle odbywa się to za pomocą statycznej analizy klas. Jeśli Twoja aplikacja korzysta z refleksji, przetwarzania adnotacji i podobnych technik, musisz uważać, aby klasy nie zostały nieprawidłowo wykluczone.

UberJAR mają również pewne wady:

  • Jeśli masz wiele UberJAR z tymi samymi zależnościami, wówczas każda z nich będzie zawierała kopię zależności.
  • Niektóre biblioteki open source mają licencje, które mogą wykluczać 1 ich użycie w UberJAR.

1 - Niektóre licencje na biblioteki typu open source pozwalają na korzystanie z biblioteki tylko użytkownik końcowy może zastąpić jedną wersję biblioteki inną. UberJAR może utrudnić wymianę zależności między wersjami.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow