Sök…


Introduktion

Det finns en mängd tekniker för att "förpacka" Java-applikationer, webapps och så vidare för distribution till plattformen som de kommer att köras på. De sträcker sig från enkla bibliotek eller körbara JAR filer, WAR och EAR filer, till installatörer och fristående körbara program.

Anmärkningar

På den mest grundläggande nivån kan ett Java-program distribueras genom att kopiera en kompilerad klass (dvs. en ".klass" -fil) eller ett katalogträd som innehåller kompilerade klasser. Men Java är normalt distribuerat på ett av följande sätt:

  • Genom att kopiera en JAR-fil eller samling av JAR-filer till systemet där de kommer att köras; t.ex. att använda javac .

  • Genom att kopiera eller ladda upp en WAR, EAR eller liknande fil till en "servlet container" eller "applikationsserver".

  • Genom att köra ett slags applikationsinstallationsprogram som automatiserar ovanstående. Installatören kan också installera en inbäddad JRE.

  • Genom att sätta JAR-filer för applikationen på en webbserver så att de kan startas med Java WebStart.

Exemplet Skapa JAR, WAR och EAR sammanfattar de olika sätten att skapa dessa filer.

Det finns många öppen källkod och kommersiella verktyg för "installationsprogram" och "EXE-generator" för Java. På liknande sätt finns det verktyg för att dölja Java-klassfiler (för att göra omvänd teknik svårare) och för att lägga till körtidslicenskontroll. Dessa är alla utanför räckvidden för dokumentationen "Java Programming Language".

Göra en körbar JAR från kommandoraden

För att skapa en burk behöver du en eller flera klassfiler. Detta bör ha en huvudmetod om den ska köras med ett dubbelklick.

I det här exemplet kommer vi att använda:

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);
    }

}

Den har fått namnet HelloWorld.java

Därefter vill vi sammanställa det här programmet.

Du kan använda alla program du vill göra detta. För att köra från kommandoraden, se dokumentationen för att sammanställa och köra ditt första java-program.

När du har HelloWorld.class, skapa en ny mapp och kalla den vad du vill.

Skapa en annan fil som heter manifest.txt och klistra in i den

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

Lägg den i samma mapp med HelloWorld.class
Använd kommandoraden för att göra din nuvarande katalog ( cd C:\Your\Folder\Path\Here på windows) till din mapp.

Använd terminal och ändra katalog till katalogen ( cd /Users/user/Documents/Java/jarfolder på Mac) din mapp

När det är klart, skriv in jar -cvfm HelloWorld.jar manifest.txt HelloWorld.class och tryck på enter. Detta skapar en jarfil (i mappen med ditt manifest och HelloWorld.class) med hjälp av .class-filerna som anges och heter HelloWorld.jar. Se avsnittet Syntax för information om alternativen (som -m och -v).
Efter dessa steg går du till din katalog med manifestfilen och du bör hitta HelloWorld.jar
Om du klickar på den visas Hello, World i en textruta.

Skapa JAR-, WAR- och EAR-filer

JAR-, WAR- och EAR-filtyperna är i grunden ZIP-filer med en "manifest" -fil och (för WAR- och EAR-filer) en viss intern katalog / filstruktur.

Det rekommenderade sättet att skapa dessa filer är att använda ett Java-specifikt byggverktyg som "förstår" kraven för respektive filtyper. Om du inte använder ett byggverktyg är IDE "export" nästa alternativ att prova.

( Redaktionell anmärkning: beskrivningarna av hur man skapar dessa filer är bäst placerade i dokumentationen för respektive verktyg. Lägg dem där. Vänligen visa lite självbehörighet och SKAJA dem inte i det här exemplet! )

Skapa JAR- och WAR-filer med Maven

Att skapa en JAR eller WAR med Maven handlar helt enkelt om att sätta rätt <packaging> -element i POM-filen; t.ex,

<packaging>jar</packaging>

eller

<packaging>war</packaging>

För mer detaljer. Maven kan konfigureras för att skapa "körbara" JAR-filer genom att lägga till erforderlig information om ingångspunktsklassen och externa beroenden som pluginegenskaper för plugin-maven jar. Det finns till och med ett plugin för att skapa "uberJAR" -filer som kombinerar ett program och dess beroenden i en enda JAR-fil.

Se Maven-dokumentationen ( http://www.riptutorial.com/topic/898 ) för mer information.

Skapa JAR-, WAR- och EAR-filer med Ant

Ant build-verktyget har separata "uppgifter" för att bygga JAR, WAR och EAR. Mer information finns i dokumentationen för myror ( http://www.riptutorial.com/topic/4223 ).

Skapa JAR-, WAR- och EAR-filer med en IDE

De tre mest populära Java IDE: erna har alla inbyggt stöd för att skapa distributionsfiler. Funktionaliteten beskrivs ofta som "exportera".

Skapa JAR-, WAR- och EAR-filer med hjälp av jar kommandot.

Det är också möjligt att skapa dessa filer "för hand" med hjälp av jar kommandot. Det handlar helt enkelt om att sätta ihop ett filträd med rätt komponentfiler på rätt plats, skapa en manifestfil och köra jar att skapa JAR-filen.

Se jar kommandot Ämne ( Skapa och modifiera JAR-filer ) för mer information

Introduktion till Java Web Start

Oracle Java Tutorials sammanfattar Web Start på följande sätt:

Java Web Start-programvaran ger dig möjlighet att starta fullständiga applikationer med ett enda klick. Användare kan ladda ner och starta applikationer, till exempel ett komplett kalkylprogram eller en Internetchattklient, utan att gå igenom långa installationsprocedurer.

Andra fördelar med Java Web Start är stöd för signerad kod och uttrycklig deklaration av plattformsberoenden och stöd för kodcache och distribution av applikationsuppdateringar.

Java Web Start kallas också JavaWS och JAWS. De främsta informationskällorna är:

förutsättningar

På en hög nivå fungerar Web Start genom att distribuera Java-applikationer packade som JAR-filer från en fjärrserver. Förutsättningarna är:

  • En redan existerande Java-installation (JRE eller JDK) på målmaskinen där applikationen ska köras. Java 1.2.2 eller högre krävs:

    • Från Java 5.0 och framåt ingår Web Start-support i JRE / JDK.
    • För tidigare utgåvor installeras Web Start-support separat.
    • Web Start-infrastrukturen innehåller en del Javascript som kan inkluderas på en webbsida för att hjälpa användaren att installera nödvändig programvara.
  • Webbservern som är värd för programvaran måste vara tillgänglig för målmaskinen.

  • Om användaren kommer att lansera en Web Start-applikation med en länk på en webbsida, gör så:

    • de behöver en kompatibel webbläsare, och
    • för moderna (säkra) webbläsare måste de få veta hur man berättar för webbläsaren att tillåta Java att köra ... utan att kompromissa med webbläsarens säkerhet.

Ett exempel på JNLP-fil

Följande exempel är avsett att illustrera JNLP: s grundläggande funktionalitet.

<?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>    

Som ni ser är en JNLP-fil XML-baserad, och informationen finns allt i <jnlp> -elementet.

  • spec attributet ger den version av JNPL-specifikationen som den här filen överensstämmer med.
  • codebase ger bas-URL för att lösa relativa href URL: er i resten av filen.
  • href attributet ger den definitiva URL: en för denna JNLP-fil.
  • Elementet <information> innehåller metadata för applikationen inklusive dess titel, författare, beskrivning och hjälpwebbplats.
  • Elementet <resources> beskriver beroenden för applikationen inklusive den nödvändiga Java-versionen, OS-plattformen och JAR-filer.
  • <application-desc> (eller <applet-desc> ) ger information som behövs för att starta applikationen.

Ställa in webbservern

Webbservern måste konfigureras för att använda application/x-java-jnlp-file som MIME-typ för .jnlp filer.

JNLP-filen och applikationens JAR-filer måste installeras på webbservern så att de är tillgängliga med hjälp av URL: er som indikeras av JNLP-filen.

Aktiverar lansering via en webbsida

Om applikationen ska startas via en webblänk måste den sida som innehåller länken skapas på webbservern.

  • Om du kan anta att Java Web Start redan är installerat på användarens maskin måste webbsidan helt enkelt innehålla en länk för att starta applikationen. Till exempel.

    <a href="https://www.example.com/demo_webstart.jnlp">Launch the application</a>
    
  • Annars bör sidan också innehålla vissa skript för att upptäcka vilken webbläsare användaren använder och begära att ladda ner och installera den version av Java som krävs.

OBS: Det är en dålig idé att uppmuntra användare att uppmuntra att installera Java på detta sätt, eller till och med att aktivera Java i sina webbläsare så att JNLP-webbsidans start fungerar.

Starta Web Start-applikationer från kommandoraden

Instruktionerna för att starta ett Web Start-program från kommandoraden är enkla. Förutsatt att användaren har en Java 5.0 JRE eller JDK installerad, behöver han bara köra detta:

$ javaws <url>

där <url> är webbadressen för JNLP-filen på fjärrservern.

Skapa en UberJAR för en applikation och dess beroenden

Ett vanligt krav för en Java-applikation är att det kan distribueras genom att kopiera en enda fil. För enkla applikationer som bara beror på standardbiblioteket för Java SE-klass uppfylls detta krav genom att skapa en JAR-fil som innehåller alla (sammanställda) applikationsklasser.

Det är inte så okomplicerat om applikationen beror på tredjepartsbibliotek. Om du helt enkelt sätter beroende-JAR-filer i en applikations-JAR, kommer Java-klassläsaren inte att kunna hitta biblioteksklasserna, och din applikation startar inte. Istället måste du skapa en enda JAR-fil som innehåller applikationsklasser och tillhörande resurser tillsammans med beroendeklasser och resurser. Dessa måste organiseras som ett enda namnutrymme för klassläsaren att söka.

En sådan JAR-fil benämns ofta en UberJAR.

Skapa en UberJAR med kommandot "jar"

Proceduren för att skapa en UberJAR är rak. (Jag kommer att använda Linux-kommandon för enkelhet. Kommandona ska vara identiska för Mac OS och liknande för Windows.)

  1. Skapa en tillfällig katalog och ändra katalogen till den.

    $ mkdir tempDir
    $ cd tempDir
    
  2. För varje beroende JAR-fil, i omvänd ordning som de måste visas på programmets klassväg, använde jar kommandot för att packa upp JAR i den tillfälliga katalogen.

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

    Att göra detta för flera JAR-filer kommer att lägga till JAR: s innehåll.

  3. Kopiera applikationsklasserna från byggträdet till den tillfälliga katalogen

    $ cp -r path/to/classes .
    
  4. Skapa UberJAR från innehållet i den tillfälliga katalogen:

    $ jar -cf ../myApplication.jar
    

    Om du skapar en körbar JAR-fil, inkludera en lämplig MANIFEST.MF som beskrivs här.

Skapa en UberJAR med Maven

Om ditt projekt byggs med Maven kan du få det till att skapa en UberJAR med antingen pluggen "maven-assemblage" eller "maven-skugga". Se ämnet Maven Assembly (i Maven- dokumentationen) för mer information.

Fördelarna och nackdelarna med UberJARs

Några av fördelarna med UberJAR är självklara:

  • En UberJAR är lätt att distribuera.
  • Du kan inte bryta bibliotekens beroenden för en UberJAR, eftersom biblioteken är fristående.

Om du använder ett lämpligt verktyg för att skapa UberJAR har du dessutom möjligheten att utesluta biblioteksklasser som inte används från JAR-filen. Men att detta vanligtvis görs genom statisk analys av klasserna. Om din ansökan använder reflektion, annoteringsbehandling och liknande tekniker måste du vara försiktig så att klasser inte utesluts felaktigt.

UberJAR har också några nackdelar:

  • Om du har massor av UberJAR med samma beroenden innehåller var och en en kopia av beroenden.
  • Vissa bibliotek med öppen källkod har licenser som kan utesluta att 1 används i en UberJAR.

1 - Vissa öppna källkodslicenser tillåter dig att använda biblioteket endast för slutanvändaren kan ersätta en version av biblioteket med en annan. UberJAR kan göra det svårt att byta versionberoende.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow