Java Language
Java-distribution
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".
- Eclipse - http://www.riptutorial.com/topic/1143
- NetBeans - http://www.riptutorial.com/topic/5438
- Intellij-IDEA - Export
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:
- Java-handledning - Lektion: Java Web Start
- Java Web Start Guide
- Vanliga frågor om Java Web Start
- JNLP-specifikation
-
javax.jnlp
API-dokumentation - Java Web Start Developers Site
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 relativahref
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.)
Skapa en tillfällig katalog och ändra katalogen till den.
$ mkdir tempDir $ cd tempDir
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.
Kopiera applikationsklasserna från byggträdet till den tillfälliga katalogen
$ cp -r path/to/classes .
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.