Java Language
Implementazione Java
Ricerca…
introduzione
Ci sono una varietà di tecnologie per "confezionare" applicazioni Java, webapp e così via, per l'implementazione sulla piattaforma su cui verranno eseguite. Si va dalla semplice libreria o file JAR
eseguibili, ai file WAR
e EAR
, fino agli installer e agli eseguibili autonomi.
Osservazioni
Al livello più fondamentale, un programma Java può essere distribuito copiando una classe compilata (ad esempio un file ".class") o una struttura di directory contenente classi compilate. Tuttavia, Java viene normalmente distribuito in uno dei seguenti modi:
Copiando un file JAR o una raccolta di file JAR nel sistema in cui verranno eseguiti; ad esempio utilizzando
javac
.Copiando o caricando un WAR, EAR o un file simile in un "servlet container" o "application server".
Eseguendo un qualche tipo di programma di installazione dell'applicazione che automatizza quanto sopra. Il programma di installazione potrebbe anche installare un JRE incorporato.
Inserendo i file JAR dell'applicazione su un server Web per consentire il loro avvio utilizzando Java WebStart.
L'esempio Creazione di file JAR, WAR ed EAR riepiloga i diversi modi per creare questi file.
Esistono numerosi strumenti di "generatore di installazione" open source e "commerciale" e "generatore EXE" per Java. Allo stesso modo, ci sono strumenti per offuscare i file di classe Java (per rendere più difficile la retroingegnerizzazione) e per aggiungere il controllo delle licenze di runtime. Questi sono tutti fuori portata per la documentazione "Linguaggio di programmazione Java".
Creare un JAR eseguibile dalla riga di comando
Per creare un jar, hai bisogno di uno o più file di classe. Questo dovrebbe avere un metodo principale se deve essere eseguito con un doppio clic.
Per questo esempio, useremo:
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);
}
}
È stato nominato HelloWorld.java
Successivamente, vogliamo compilare questo programma.
Puoi usare qualsiasi programma che vuoi fare. Per eseguire dalla riga di comando, consultare la documentazione sulla compilazione e l'esecuzione del primo programma java.
Una volta che hai HelloWorld.class, crea una nuova cartella e chiamala come vuoi.
Crea un altro file chiamato manifest.txt e incollalo
Main-Class: HelloWorld
Class-Path: HelloWorld.jar
Inseriscilo nella stessa cartella con HelloWorld.class
Usa la riga di comando per creare la tua directory corrente ( cd C:\Your\Folder\Path\Here
on windows) la tua cartella.
Usa Terminale e cambia la directory nella directory ( cd /Users/user/Documents/Java/jarfolder
su Mac) della tua cartella
Al termine, digita jar -cvfm HelloWorld.jar manifest.txt HelloWorld.class
e premi jar -cvfm HelloWorld.jar manifest.txt HelloWorld.class
. Questo crea un file jar (nella cartella con manifest e HelloWorld.class) utilizzando i file .class specificati e denominati HelloWorld.jar. Vedi la sezione Sintassi per informazioni sulle opzioni (come -m e -v).
Dopo questi passaggi, vai nella tua directory con il file manifest e dovresti trovare HelloWorld.jar
Cliccando su di esso dovrebbe visualizzare Hello, World
in una casella di testo.
Creazione di file JAR, WAR ed EAR
I tipi di file JAR, WAR ed EAR sono fondamentalmente file ZIP con un file "manifest" e (per i file WAR e EAR) una particolare directory interna / struttura di file.
Il modo consigliato per creare questi file è utilizzare uno strumento di compilazione specifico di Java che "capisca" i requisiti per i rispettivi tipi di file. Se non si utilizza uno strumento di compilazione, IDE "export" è la prossima opzione da provare.
( Nota editoriale: le descrizioni di come creare questi file sono nella migliore posizione nella documentazione per i rispettivi strumenti. Inseritele lì. Si prega di mostrare un po 'di autocontrollo e NON CUCCHIA le corno in questo esempio! )
Creazione di file JAR e WAR usando Maven
Creare un JAR o WAR usando Maven è semplicemente una questione di mettere l'elemento <packaging>
corretto nel file POM; per esempio,
<packaging>jar</packaging>
o
<packaging>war</packaging>
Per ulteriori dettagli. Maven può essere configurato per creare file JAR "eseguibili" aggiungendo le informazioni necessarie sulla classe del punto di ingresso e le dipendenze esterne come proprietà del plugin per il plugin maven jar. Esiste anche un plugin per creare file "uberJAR" che combinano un'applicazione e le sue dipendenze in un singolo file JAR.
Per ulteriori informazioni, consultare la documentazione di Maven ( http://www.Scriptutorial.com/topic/898 ).
Creare file JAR, WAR e EAR usando Ant
Lo strumento di configurazione Ant ha "compiti" separati per la costruzione di JAR, WAR ed EAR. Per ulteriori informazioni, consultare la documentazione di Ant ( http://www.Scriptutorial.com/topic/4223 ).
Creazione di file JAR, WAR ed EAR utilizzando un IDE
I tre IDE Java più popolari hanno tutti il supporto integrato per la creazione di file di distribuzione. La funzionalità è spesso descritta come "esportazione".
- Eclipse - http://www.Scriptutorial.com/topic/1143
- NetBeans - http://www.Scriptutorial.com/topic/5438
- Intellij-IDEA - Esportazione
Creazione di file JAR, WAR ed EAR utilizzando il comando jar
.
È anche possibile creare questi file "a mano" usando il comando jar
. Si tratta semplicemente di assemblare un albero di file con i file dei componenti corretti nella posizione corretta, creare un file manifest e avviare jar
per creare il file JAR.
Fare riferimento al comando jar
Argomento ( Creazione e modifica di file JAR ) per ulteriori informazioni
Introduzione a Java Web Start
Le Oracle Java Tutorials riassumono Web Start come segue:
Il software Java Web Start offre la possibilità di avviare applicazioni complete con un solo clic. Gli utenti possono scaricare e avviare applicazioni, come un programma completo per fogli di calcolo o un client di chat via Internet, senza passare attraverso lunghe procedure di installazione.
Altri vantaggi di Java Web Start sono il supporto per il codice firmato e la dichiarazione esplicita delle dipendenze della piattaforma e il supporto per la memorizzazione nella cache del codice e la distribuzione degli aggiornamenti dell'applicazione.
Java Web Start è indicato anche come JavaWS e JAWS. Le principali fonti di informazione sono:
- The Java Tutorials - Lezione: Java Web Start
- Guida di avvio Web Java
- Domande frequenti su Java Web Start
- Specifica JNLP
-
javax.jnlp
Documentazione API - Sito per sviluppatori Java Web Start
Prerequisiti
Ad un livello elevato, Web Start funziona distribuendo applicazioni Java compresse come file JAR da un server web remoto. I prerequisiti sono:
Un'installazione Java preesistente (JRE o JDK) sul computer di destinazione in cui deve essere eseguita l'applicazione. È richiesto Java 1.2.2 o versione successiva:
- Da Java 5.0 in poi, il supporto per Web Start è incluso in JRE / JDK.
- Per le versioni precedenti, il supporto di Web Start viene installato separatamente.
- L'infrastruttura Web Start include alcuni Javascript che possono essere inclusi in una pagina Web per aiutare l'utente a installare il software necessario.
Il server Web che ospita il software deve essere accessibile al computer di destinazione.
Se l'utente sta per avviare un'applicazione Web Start utilizzando un collegamento in una pagina Web, quindi:
- hanno bisogno di un browser web compatibile e
- per i browser moderni (sicuri), è necessario dir loro come dire al browser di consentire l'esecuzione di Java ... senza compromettere la sicurezza del browser.
Un esempio di file JNLP
L'esempio seguente ha lo scopo di illustrare le funzionalità di base di 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>
Come puoi vedere, un file JNLP basato su XML e le informazioni sono tutte contenute nell'elemento <jnlp>
.
- L'attributo
spec
fornisce la versione della specifica JNPL a cui questo file è conforme. - L'attributo
codebase
fornisce l'URL di base per la risoluzione degli URL relativihref
nel resto del file. - L'attributo
href
fornisce l'URL definitivo per questo file JNLP. - L'elemento
<information>
contiene i metadati dell'applicazione, inclusi titolo, autori, descrizione e sito Web di assistenza. - L'elemento
<resources>
descrive le dipendenze per l'applicazione, tra cui la versione Java, la piattaforma OS ei file JAR richiesti. - L'elemento
<application-desc>
(o<applet-desc>
) fornisce le informazioni necessarie per avviare l'applicazione.
Configurazione del server web
Il server web deve essere configurato per utilizzare application/x-java-jnlp-file
come MIMEtype per i file .jnlp
.
Il file JNLP ei file JAR dell'applicazione devono essere installati sul server Web in modo che siano disponibili utilizzando gli URL indicati dal file JNLP.
Abilitazione dell'avvio tramite una pagina Web
Se l'applicazione deve essere avviata tramite un collegamento Web, la pagina che contiene il collegamento deve essere creata sul server web.
Se si può presumere che Java Web Start sia già installato sul computer dell'utente, la pagina Web deve semplicemente contenere un collegamento per avviare l'applicazione. Per esempio.
<a href="https://www.example.com/demo_webstart.jnlp">Launch the application</a>
In caso contrario, la pagina dovrebbe includere anche alcuni script per rilevare il tipo di browser che l'utente sta utilizzando e richiedere di scaricare e installare la versione richiesta di Java.
NOTA: è una cattiva idea incoraggiare gli utenti a incoraggiare l'installazione di Java in questo modo, o persino a abilitare Java nei loro browser Web in modo che l'avvio della pagina Web JNLP funzioni.
Avvio di applicazioni Web Start dalla riga di comando
Le istruzioni per avviare un'applicazione Web Start dalla riga di comando sono semplici. Supponendo che l'utente abbia installato Java 5.0 JRE o JDK, è sufficiente eseguire questo:
$ javaws <url>
dove <url>
è l'URL per il file JNLP sul server remoto.
Creazione di un UberJAR per un'applicazione e le sue dipendenze
Un requisito comune per un'applicazione Java è che può essere distribuito copiando un singolo file. Per applicazioni semplici che dipendono solo dalle librerie di classi Java SE standard, questo requisito viene soddisfatto creando un file JAR contenente tutte le classi di applicazioni (compilate).
Le cose non sono così semplici se l'applicazione dipende da librerie di terze parti. Se si inseriscono semplicemente i file JAR di dipendenza all'interno di un JAR dell'applicazione, il programma di caricamento classi Java standard non sarà in grado di trovare le classi della libreria e l'applicazione non verrà avviata. Invece, è necessario creare un singolo file JAR che contenga le classi dell'applicazione e le risorse associate insieme alle classi di dipendenza e alle risorse. Questi devono essere organizzati come un singolo spazio dei nomi per il classloader da cercare.
Il file JAR di questo tipo viene spesso definito UberJAR.
Creare un UberJAR usando il comando "jar"
La procedura per creare un UberJAR è semplice. (Userò i comandi di Linux per semplicità: i comandi dovrebbero essere identici per Mac OS e simili per Windows).
Creare una directory temporanea e cambiarne la directory.
$ mkdir tempDir $ cd tempDir
Per ogni file JAR dipendente, nell'ordine inverso che devono apparire sul classpath dell'applicazione, è stato utilizzato il comando
jar
per decomprimere il JAR nella directory temporanea.$ jar -xf <path/to/file.jar>
Facendo questo per più file JAR si sovrappone il contenuto dei JAR.
Copia le classi dell'applicazione dall'albero di creazione nella directory temporanea
$ cp -r path/to/classes .
Crea UberJAR dai contenuti della directory temporanea:
$ jar -cf ../myApplication.jar
Se si sta creando un file JAR eseguibile, includere un MANIFEST.MF appropriato come descritto qui.
Creare un UberJAR usando Maven
Se il tuo progetto è stato creato usando Maven, puoi creare un UberJAR usando i plugin "maven-assembly" o "maven-shade". Vedere l'argomento Assembly Maven (nella documentazione di Maven ) per i dettagli.
I vantaggi e gli svantaggi di UberJARs
Alcuni dei vantaggi degli UberJAR sono evidenti:
- Un UberJAR è facile da distribuire.
- Non è possibile rompere le dipendenze della libreria per un UberJAR, poiché le librerie sono autonome.
Inoltre, se si utilizza uno strumento appropriato per creare UberJAR, si avrà la possibilità di escludere le classi di libreria che non vengono utilizzate dal file JAR. Tuttavia, questo è tipicamente fatto dall'analisi statica delle classi. Se l'applicazione utilizza la riflessione, l'elaborazione delle annotazioni e tecniche simili, è necessario fare attenzione che le classi non siano escluse in modo errato.
Gli UberJAR hanno anche alcuni svantaggi:
- Se hai molti UberJAR con le stesse dipendenze, ognuno conterrà una copia delle dipendenze.
- Alcune librerie open source hanno licenze che possono precludere 1 il loro utilizzo in un UberJAR.
1 - Alcune licenze di librerie open source consentono di utilizzare solo la libreria dell'utente finale che è in grado di sostituire una versione della libreria con un'altra. Gli UberJAR possono rendere difficile la sostituzione delle dipendenze della versione.