Recherche…


Introduction

Il existe une variété de technologies pour «empaqueter» les applications Java, les applications Web, etc., en vue de leur déploiement sur la plate-forme sur laquelle elles s'exécuteront. Ils vont de la simple bibliothèque ou des fichiers JAR exécutables, des fichiers WAR et EAR aux programmes d'installation et aux exécutables autonomes.

Remarques

Au niveau le plus fondamental, un programme Java peut être déployé en copiant une classe compilée (un fichier ".class") ou une arborescence de répertoires contenant des classes compilées. Cependant, Java est normalement déployé de l'une des manières suivantes:

  • En copiant un fichier JAR ou une collection de fichiers JAR sur le système où ils seront exécutés; par exemple en utilisant javac .

  • En copiant ou en téléchargeant un fichier WAR, EAR ou un fichier similaire dans un "conteneur de servlets" ou un "serveur d'applications".

  • En exécutant une sorte d’installateur d’application qui automatise ce qui précède. Le programme d'installation peut également installer un environnement JRE intégré.

  • En plaçant les fichiers JAR de l’application sur un serveur Web pour permettre leur lancement à l’aide de Java WebStart.

L'exemple de création de fichiers JAR, WAR et EAR résume les différentes façons de créer ces fichiers.

Il existe de nombreux outils open source et commerciaux "installer generator" et "EXE generator" pour Java. De même, il existe des outils pour masquer les fichiers de classe Java (pour rendre le reverse engineering plus difficile) et pour ajouter une vérification de licence d'exécution. Tout cela est hors de portée pour la documentation "Java Programming Language".

Créer un fichier JAR exécutable à partir de la ligne de commande

Pour créer un pot, vous avez besoin d'un ou plusieurs fichiers de classe. Cela devrait avoir une méthode principale si elle doit être exécutée par un double clic.

Pour cet exemple, nous utiliserons:

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

}

Il a été nommé HelloWorld.java

Ensuite, nous voulons compiler ce programme.

Vous pouvez utiliser n'importe quel programme que vous voulez faire. Pour exécuter à partir de la ligne de commande, consultez la documentation sur la compilation et l'exécution de votre premier programme Java.

Une fois que vous avez HelloWorld.class, créez un nouveau dossier et appelez-le comme vous voulez.

Créez un autre fichier appelé manifest.txt et collez-le

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

Placez-le dans le même dossier avec HelloWorld.class
Utilisez la ligne de commande pour créer votre répertoire actuel ( cd C:\Your\Folder\Path\Here sur Windows).

Utilisez Terminal et changez de répertoire vers le répertoire ( cd /Users/user/Documents/Java/jarfolder sur Mac) votre dossier

Lorsque cela est fait, tapez jar -cvfm HelloWorld.jar manifest.txt HelloWorld.class et appuyez sur Entrée. Cela crée un fichier jar (dans le dossier avec votre manifeste et HelloWorld.class) en utilisant les fichiers .class spécifiés et nommés HelloWorld.jar. Voir la section Syntaxe pour plus d'informations sur les options (comme -m et -v).
Après ces étapes, accédez à votre répertoire avec le fichier manifeste et vous devriez trouver HelloWorld.jar
Cliquer dessus devrait afficher Hello, World dans une zone de texte.

Création de fichiers JAR, WAR et EAR

Les types de fichiers JAR, WAR et EAR sont fondamentalement des fichiers ZIP avec un fichier "manifest" et (pour les fichiers WAR et EAR) une structure de répertoire / fichier interne particulière.

La méthode recommandée pour créer ces fichiers consiste à utiliser un outil de génération spécifique à Java qui «comprend» les exigences pour les types de fichiers respectifs. Si vous n'utilisez pas d'outil de construction, l'IDE "export" est la prochaine option à essayer.

( Note éditoriale: les descriptions de la façon de créer ces fichiers sont mieux placées dans la documentation des outils respectifs. Placez-les là-bas. Veuillez faire preuve de retenue et ne pas les casser dans cet exemple! )

Création de fichiers JAR et WAR à l'aide de Maven

Créer un fichier JAR ou WAR à l’aide de Maven consiste simplement à placer l’élément <packaging> correct dans le fichier POM; par exemple,

<packaging>jar</packaging>

ou

<packaging>war</packaging>

Pour plus de détails. Maven peut être configuré pour créer des fichiers JAR "exécutables" en ajoutant les informations requises sur la classe du point d'entrée et les dépendances externes en tant que propriétés du plug-in maven jar. Il existe même un plugin pour créer des fichiers "uberJAR" qui combinent une application et ses dépendances en un seul fichier JAR.

S'il vous plaît se référer à la documentation Maven ( http://www.riptutorial.com/topic/898 ) pour plus d'informations.

Création de fichiers JAR, WAR et EAR à l'aide d'Ant

L'outil de génération Ant a des "tâches" distinctes pour la construction de JAR, WAR et EAR. S'il vous plaît se référer à la documentation Ant ( http://www.riptutorial.com/topic/4223 ) pour plus d'informations.

Création de fichiers JAR, WAR et EAR à l'aide d'un IDE

Les trois IDE Java les plus populaires ont tous un support intégré pour la création de fichiers de déploiement. La fonctionnalité est souvent décrite comme "exportation".

Création de fichiers JAR, WAR et EAR à l'aide de la commande jar .

Il est également possible de créer ces fichiers "à la main" en utilisant la commande jar . Il s'agit simplement d'assembler une arborescence de fichiers avec les fichiers de composants appropriés au bon endroit, de créer un fichier manifeste et d'exécuter jar pour créer le fichier JAR.

Reportez-vous à la rubrique Commande jar ( Création et modification de fichiers JAR ) pour plus d'informations.

Introduction à Java Web Start

Les tutoriels Oracle Java résument Web Start comme suit:

Le logiciel Java Web Start permet de lancer des applications complètes en un seul clic. Les utilisateurs peuvent télécharger et lancer des applications, telles qu'un tableur complet ou un client de discussion sur Internet, sans passer par de longues procédures d'installation.

Les autres avantages de Java Web Start sont la prise en charge du code signé et la déclaration explicite des dépendances de plate-forme, ainsi que la prise en charge de la mise en cache du code et du déploiement des mises à jour des applications.

Java Web Start est également appelé JavaWS et JAWS. Les principales sources d'information sont:

Conditions préalables

À un niveau élevé, Web Start fonctionne en distribuant des applications Java empaquetées en tant que fichiers JAR à partir d'un serveur Web distant. Les prérequis sont:

  • Une installation Java préexistante (JRE ou JDK) sur la machine cible sur laquelle l'application doit s'exécuter. Java 1.2.2 ou supérieur est requis:

    • A partir de Java 5.0, la prise en charge de Web Start est incluse dans JRE / JDK.
    • Pour les versions antérieures, la prise en charge de Web Start est installée séparément.
    • L'infrastructure Web Start inclut du Javascript qui peut être inclus dans une page Web pour aider l'utilisateur à installer les logiciels nécessaires.
  • Le serveur Web qui héberge le logiciel doit être accessible à la machine cible.

  • Si l'utilisateur va lancer une application Web Start en utilisant un lien dans une page Web, alors:

    • ils ont besoin d'un navigateur Web compatible, et
    • pour les navigateurs modernes (sécurisés), ils doivent savoir comment indiquer au navigateur d'autoriser l'exécution de Java ... sans compromettre la sécurité du navigateur Web.

Un exemple de fichier JNLP

L'exemple suivant est destiné à illustrer les fonctionnalités de base de 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>    

Comme vous pouvez le voir, un fichier JNLP basé sur XML et les informations sont toutes contenues dans l'élément <jnlp> .

  • L'attribut spec donne la version de la spécification JNPL à laquelle ce fichier est conforme.
  • L'attribut codebase donne l'URL de base pour la résolution des URL href relatives dans le reste du fichier.
  • L'attribut href donne l'URL définitive pour ce fichier JNLP.
  • L'élément <information> contient les métadonnées de l'application, y compris son titre, ses auteurs, sa description et son site Web d'aide.
  • L'élément <resources> décrit les dépendances de l'application, y compris la version Java requise, la plate-forme OS et les fichiers JAR.
  • L'élément <application-desc> (ou <applet-desc> ) fournit les informations nécessaires au lancement de l'application.

Configuration du serveur Web

Le serveur Web doit être configuré pour utiliser le application/x-java-jnlp-file comme type MIME pour les fichiers .jnlp .

Le fichier JNLP et les fichiers JAR de l'application doivent être installés sur le serveur Web afin qu'ils soient disponibles à l'aide des URL indiquées par le fichier JNLP.

Activation du lancement via une page Web

Si l'application doit être lancée via un lien Web, la page contenant le lien doit être créée sur le serveur Web.

  • Si vous pouvez supposer que Java Web Start est déjà installé sur l'ordinateur de l'utilisateur, la page Web doit simplement contenir un lien permettant de lancer l'application. Par exemple.

    <a href="https://www.example.com/demo_webstart.jnlp">Launch the application</a>
    
  • Sinon, la page doit également inclure des scripts pour détecter le type de navigateur utilisé par l'utilisateur et demander à télécharger et installer la version requise de Java.

REMARQUE: Il est déconseillé d'encourager les utilisateurs à encourager l'installation de Java de cette manière ou même d'activer Java dans leurs navigateurs Web pour que le lancement de la page Web JNLP fonctionne.

Lancer des applications Web Start à partir de la ligne de commande

Les instructions pour lancer une application Web Start à partir de la ligne de commande sont simples. En supposant que l'utilisateur dispose d'un JRE ou JDK Java 5.0, il suffit de l'exécuter:

$ javaws <url>

<url> est l'URL du fichier JNLP sur le serveur distant.

Créer un UberJAR pour une application et ses dépendances

Une exigence commune pour une application Java est qu’elle peut être déployée en copiant un seul fichier. Pour les applications simples qui ne dépendent que des bibliothèques de classes Java SE standard, cette exigence est satisfaite en créant un fichier JAR contenant toutes les classes d'applications (compilées).

Les choses ne sont pas si simples si l'application dépend de bibliothèques tierces. Si vous placez simplement des fichiers JAR de dépendance dans un JAR d'application, le chargeur de classe Java standard ne pourra pas trouver les classes de bibliothèque et votre application ne démarrera pas. Au lieu de cela, vous devez créer un fichier JAR unique contenant les classes d'application et les ressources associées avec les classes et les ressources de dépendance. Celles-ci doivent être organisées en un seul espace de noms pour le chargeur de classe.

Un tel fichier JAR est souvent appelé UberJAR.

Créer un UberJAR en utilisant la commande "jar"

La procédure de création d'un UberJAR est simple. (J'utiliserai les commandes Linux pour plus de simplicité. Les commandes doivent être identiques pour Mac OS et similaires pour Windows.)

  1. Créez un répertoire temporaire et modifiez-le.

    $ mkdir tempDir
    $ cd tempDir
    
  2. Pour chaque fichier JAR dépendant, dans l'ordre inverse où ils doivent apparaître dans le chemin de classe de l'application, utilisez la commande jar pour décompresser le fichier JAR dans le répertoire temporaire.

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

    Faire cela pour plusieurs fichiers JAR superposera le contenu des fichiers JAR.

  3. Copiez les classes d'application de l'arborescence de construction dans le répertoire temporaire

    $ cp -r path/to/classes .
    
  4. Créez le UberJAR à partir du contenu du répertoire temporaire:

    $ jar -cf ../myApplication.jar
    

    Si vous créez un fichier JAR exécutable, incluez un fichier MANIFEST.MF approprié, comme décrit ici.

Création d'un UberJAR à l'aide de Maven

Si votre projet est construit avec Maven, vous pouvez le faire pour créer un UberJAR en utilisant les plugins "maven-assembly" ou "maven-shade". Voir la rubrique Maven Assembly (dans la documentation Maven ) pour plus de détails.

Les avantages et inconvénients des UberJAR

Certains avantages des UberJAR sont évidents:

  • Un UberJAR est facile à distribuer.
  • Vous ne pouvez pas casser les dépendances de bibliothèque pour un UberJAR, car les bibliothèques sont autonomes.

De plus, si vous utilisez un outil approprié pour créer UberJAR, vous aurez la possibilité d'exclure les classes de bibliothèque qui ne sont pas utilisées à partir du fichier JAR. Cependant, cela se fait généralement par une analyse statique des classes. Si votre application utilise la réflexion, le traitement des annotations et des techniques similaires, vous devez faire attention à ce que les classes ne soient pas exclues de manière incorrecte.

Les UberJAR présentent également certains inconvénients:

  • Si vous avez beaucoup de UberJAR avec les mêmes dépendances, chacune contiendra une copie des dépendances.
  • Certaines bibliothèques open source ont des licences qui peuvent empêcher 1 leur utilisation dans un UberJAR.

1 - Certaines licences de bibliothèque open source vous permettent d’utiliser uniquement la bibliothèque de l’utilisateur final qui peut remplacer une version de la bibliothèque par une autre. Les UberJAR peuvent rendre difficile le remplacement des dépendances de version.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow