Java Language
Despliegue de Java
Buscar..
Introducción
Existe una variedad de tecnologías para "empaquetar" aplicaciones Java, aplicaciones web, etc., para su implementación en la plataforma en la que se ejecutarán. Abarcan desde bibliotecas simples o archivos JAR
ejecutables, archivos WAR
y EAR
, hasta instaladores y ejecutables independientes.
Observaciones
En el nivel más fundamental, un programa Java puede implementarse copiando una clase compilada (es decir, un archivo ".class") o un árbol de directorios que contiene clases compiladas. Sin embargo, Java normalmente se implementa de una de las siguientes maneras:
Al copiar un archivo JAR o una colección de archivos JAR en el sistema donde se ejecutarán; por ejemplo, utilizando
javac
.Al copiar o cargar un archivo WAR, EAR o similar en un "contenedor de servlets" o "servidor de aplicaciones".
Al ejecutar algún tipo de instalador de aplicaciones que automatiza lo anterior. El instalador también puede instalar un JRE incorporado.
Al colocar los archivos JAR para la aplicación en un servidor web para permitir que se inicien utilizando Java WebStart.
El ejemplo de Creación de archivos JAR, WAR y EAR resume las diferentes formas de crear estos archivos.
Existen numerosas herramientas de código abierto y comercial "generador de instalador" y "generador EXE" para Java. De manera similar, existen herramientas para ofuscar archivos de clase Java (para dificultar la ingeniería inversa) y para agregar la verificación de licencias en tiempo de ejecución. Todo esto está fuera del alcance de la documentación del "Lenguaje de programación Java".
Haciendo un JAR ejecutable desde la línea de comando
Para hacer un jar, necesita uno o más archivos de clase. Esto debería tener un método principal si se va a ejecutar haciendo doble clic.
Para este ejemplo, utilizaremos:
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);
}
}
Ha sido nombrado HelloWorld.java
A continuación, queremos compilar este programa.
Puede utilizar cualquier programa que desee hacer esto. Para ejecutar desde la línea de comandos, consulte la documentación sobre cómo compilar y ejecutar su primer programa java.
Una vez que tengas HelloWorld.class, crea una nueva carpeta y llámala como quieras.
Haz otro archivo llamado manifest.txt y pégalo en él.
Main-Class: HelloWorld
Class-Path: HelloWorld.jar
Ponlo en la misma carpeta con HelloWorld.class
Use la línea de comando para hacer de su directorio actual ( cd C:\Your\Folder\Path\Here
en windows) su carpeta.
Use Terminal y cambie el directorio al directorio ( cd /Users/user/Documents/Java/jarfolder
en Mac) su carpeta
Cuando haya terminado, escriba jar -cvfm HelloWorld.jar manifest.txt HelloWorld.class
y presione Entrar. Esto crea un archivo jar (en la carpeta con su manifiesto y HelloWorld.class) utilizando los archivos .class especificados y llamados HelloWorld.jar. Consulte la sección Sintaxis para obtener información sobre las opciones (como -m y -v).
Después de estos pasos, vaya a su directorio con el archivo de manifiesto y debería encontrar HelloWorld.jar
Al hacer clic en él debería aparecer Hello, World
en un cuadro de texto.
Creando archivos JAR, WAR y EAR
Los tipos de archivos JAR, WAR y EAR son fundamentalmente archivos ZIP con un archivo "manifiesto" y (para archivos WAR y EAR) un directorio / estructura interna particular.
La forma recomendada de crear estos archivos es utilizar una herramienta de compilación específica de Java que "entienda" los requisitos para los tipos de archivo respectivos. Si no usa una herramienta de compilación, la opción siguiente es intentar "exportar" al IDE.
( Nota editorial: las descripciones de cómo crear estos archivos se ubican mejor en la documentación de las herramientas respectivas. Póngalas allí. ¡Por favor, muestre un poco de autocontrol y NO las calce en este ejemplo! )
Creando archivos JAR y WAR usando Maven
Crear un JAR o WAR utilizando Maven es simplemente una cuestión de colocar el elemento <packaging>
correcto en el archivo POM; p.ej,
<packaging>jar</packaging>
o
<packaging>war</packaging>
Para más detalles. Maven se puede configurar para crear archivos JAR "ejecutables" agregando la información necesaria sobre la clase de punto de entrada y las dependencias externas como propiedades de plugin para el plugin de maven jar. Incluso hay un complemento para crear archivos "uberJAR" que combinan una aplicación y sus dependencias en un solo archivo JAR.
Consulte la documentación de Maven ( http://www.riptutorial.com/topic/898 ) para obtener más información.
Creando archivos JAR, WAR y EAR usando Ant
La herramienta de compilación Ant tiene "tareas" separadas para construir JAR, WAR y EAR. Consulte la documentación de Ant ( http://www.riptutorial.com/topic/4223 ) para obtener más información.
Creando archivos JAR, WAR y EAR usando un IDE
Los tres IDE de Java más populares tienen soporte incorporado para crear archivos de implementación. La funcionalidad a menudo se describe como "exportar".
- Eclipse - http://www.riptutorial.com/topic/1143
- NetBeans - http://www.riptutorial.com/topic/5438
- Intellij-IDEA - Exportando
Creando archivos JAR, WAR y EAR usando el comando jar
.
También es posible crear estos archivos "a mano" usando el comando jar
. Es simplemente una cuestión de ensamblar un árbol de archivos con los archivos del componente correcto en el lugar correcto, crear un archivo de manifiesto y ejecutar jar
para crear el archivo JAR.
Consulte el tema del comando jar
( Crear y modificar archivos JAR ) para obtener más información.
Introducción a Java Web Start
Los tutoriales de Oracle Java resumen Web Start de la siguiente manera:
El software Java Web Start brinda el poder de lanzar aplicaciones completas con un solo clic. Los usuarios pueden descargar e iniciar aplicaciones, como un programa completo de hoja de cálculo o un cliente de chat de Internet, sin pasar por largos procedimientos de instalación.
Otras ventajas de Java Web Start son la compatibilidad con el código firmado y la declaración explícita de las dependencias de la plataforma, y la compatibilidad con el almacenamiento en caché de códigos y la implementación de actualizaciones de aplicaciones.
Java Web Start también se conoce como JavaWS y JAWS. Las principales fuentes de información son:
- Los tutoriales de Java - Lección: Java Web Start
- Guía de inicio de Java Web
- Preguntas frecuentes sobre Java Web Start
- Especificación JNLP
- Documentación API
javax.jnlp
- Sitio de desarrolladores de Java Web Start
Prerrequisitos
En un nivel alto, Web Start funciona distribuyendo aplicaciones Java empaquetadas como archivos JAR desde un servidor web remoto. Los requisitos previos son:
Una instalación Java preexistente (JRE o JDK) en la máquina de destino donde se ejecutará la aplicación. Se requiere Java 1.2.2 o superior:
- Desde Java 5.0 en adelante, el soporte de Web Start se incluye en el JRE / JDK.
- Para versiones anteriores, el soporte de Web Start se instala por separado.
- La infraestructura de Web Start incluye algunos Javascript que se pueden incluir en una página web para ayudar al usuario a instalar el software necesario.
El servidor web que aloja el software debe estar accesible para la máquina de destino.
Si el usuario va a iniciar una aplicación Web Start utilizando un enlace en una página web, entonces:
- necesitan un navegador web compatible, y
- para los navegadores modernos (seguros), se les debe decir cómo decirle al navegador que permita que Java se ejecute ... sin comprometer la seguridad del navegador web.
Un ejemplo de archivo JNLP
El siguiente ejemplo pretende ilustrar la funcionalidad básica 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>
Como puede ver, un archivo JNLP está basado en XML y toda la información está contenida en el elemento <jnlp>
.
- El atributo
spec
proporciona la versión de la especificación JNPL que cumple este archivo. - El atributo
codebase
proporciona la URL base para resolver las URLhref
relativas en el resto del archivo. - El atributo
href
proporciona la URL definitiva para este archivo JNLP. - El elemento
<information>
contiene metadatos de la aplicación, incluidos su título, autores, descripción y sitio web de ayuda. - El elemento
<resources>
describe las dependencias para la aplicación, incluida la versión de Java, la plataforma del sistema operativo y los archivos JAR requeridos. - El elemento
<application-desc>
(o<applet-desc>
) proporciona la información necesaria para iniciar la aplicación.
Configurando el servidor web
El servidor web debe estar configurado para usar la application/x-java-jnlp-file
como el tipo MIME para los archivos .jnlp
.
El archivo JNLP y los archivos JAR de la aplicación deben instalarse en el servidor web para que estén disponibles utilizando las URL indicadas por el archivo JNLP.
Habilitar el lanzamiento a través de una página web.
Si la aplicación se inicia a través de un enlace web, la página que contiene el enlace debe crearse en el servidor web.
Si puede asumir que Java Web Start ya está instalado en la máquina del usuario, entonces la página web simplemente necesita contener un enlace para iniciar la aplicación. Por ejemplo.
<a href="https://www.example.com/demo_webstart.jnlp">Launch the application</a>
De lo contrario, la página también debe incluir algunas secuencias de comandos para detectar el tipo de navegador que el usuario está utilizando y solicitar descargar e instalar la versión requerida de Java.
NOTA: es una mala idea animar a los usuarios a animar a instalar Java de esta manera, o incluso habilitar Java en sus navegadores web para que el lanzamiento de la página web JNLP funcione.
Lanzar aplicaciones Web Start desde la línea de comandos.
Las instrucciones para iniciar una aplicación Web Start desde la línea de comandos son simples. Suponiendo que el usuario tiene un JRE o JDK de Java 5.0 instalado, simplemente debe ejecutar esto:
$ javaws <url>
donde <url>
es la URL del archivo JNLP en el servidor remoto.
Creando un UberJAR para una aplicación y sus dependencias
Un requisito común para una aplicación Java es que puede implementarse copiando un solo archivo. Para aplicaciones simples que dependen solo de las bibliotecas de clases estándar de Java SE, este requisito se cumple creando un archivo JAR que contiene todas las clases de aplicaciones (compiladas).
Las cosas no son tan sencillas si la aplicación depende de bibliotecas de terceros. Si simplemente coloca los archivos JAR de dependencia dentro de un JAR de aplicación, el cargador de clases Java estándar no podrá encontrar las clases de la biblioteca y su aplicación no se iniciará. En su lugar, debe crear un solo archivo JAR que contenga las clases de la aplicación y los recursos asociados junto con las clases de dependencia y los recursos. Estos deben organizarse como un único espacio de nombres para que el cargador de clases busque.
El archivo JAR de este tipo suele denominarse UberJAR.
Creando un UberJAR usando el comando "jar"
El procedimiento para crear un UberJAR es sencillo. (Usaré los comandos de Linux por simplicidad. Los comandos deben ser idénticos para Mac OS y similares para Windows).
Cree un directorio temporal y cámbielo.
$ mkdir tempDir $ cd tempDir
Para cada archivo JAR dependiente, en el orden inverso al que deben aparecer en la ruta de clase de la aplicación, usó el comando
jar
para descomprimir el JAR en el directorio temporal.$ jar -xf <path/to/file.jar>
Al hacer esto para múltiples archivos JAR se superpondrán los contenidos de los JAR.
Copie las clases de aplicación del árbol de compilación en el directorio temporal
$ cp -r path/to/classes .
Cree el UberJAR a partir del contenido del directorio temporal:
$ jar -cf ../myApplication.jar
Si está creando un archivo JAR ejecutable, incluya un MANIFEST.MF apropiado como se describe aquí.
Creando un UberJAR utilizando Maven
Si su proyecto se construye utilizando Maven, puede crear un UberJAR utilizando los complementos "maven-assembly" o "maven-shade". Consulte el tema de la Asamblea de Maven (en la documentación de Maven ) para obtener más información.
Las ventajas y desventajas de los UberJARs.
Algunas de las ventajas de los UberJAR son evidentes:
- Un UberJAR es fácil de distribuir.
- No puede romper las dependencias de la biblioteca para un UberJAR, ya que las bibliotecas son autónomas.
Además, si usa una herramienta adecuada para crear UberJAR, tendrá la opción de excluir las clases de biblioteca que no se usan del archivo JAR. Sin embargo, esto se hace típicamente mediante análisis estático de las clases. Si su aplicación utiliza la reflexión, el procesamiento de anotaciones y técnicas similares, debe tener cuidado de que las clases no se excluyan incorrectamente.
Los UberJAR también tienen algunas desventajas:
- Si tiene muchos UberJAR con las mismas dependencias, cada uno contendrá una copia de las dependencias.
- Algunas bibliotecas de código abierto tienen licencias que puede impedir su uso 1 en un UberJAR.
1 - Algunas licencias de biblioteca de código abierto le permiten usar la biblioteca, solo si el usuario final puede reemplazar una versión de la biblioteca por otra. UberJARs puede dificultar el reemplazo de dependencias de versión.