Guía Java Gentoo

Joshua Nichols  Autor
Karl Trygve Kalleberg  Autor
Joshua Saddler  Editor
José Alberto Suárez López  Traductor
John Christian Stoddart  Traductor
Pablo Pita Leira  Traductor
Andrés Pereira  Traductor
José María Alonso  Traductor

Actualizado 7 de octubre, 2009

1.  ¿Qué es Java?

Resumen

Java es un lenguaje de programación desarrollado por ingenieros de Sun Microsystems. Es un lenguaje orientado a objetos y diseñado para la ejecución en múltiples plataformas sin requerir la recompilación del código fuente para cada plataforma. Aunque Java puede ser compilado como un programa nativo, se le puede atribuir una buena parte de su popularidad a su portabilidad y otras características como la recolección de basura. Para hacer posible la independencia de plataforma, el compilador de Java compila el código Java a una representación intermedia denominada "bytecode Java" el cual se ejecuta en un JRE (Java Runtime Environment, Entorno de Ejecución Java) y no directamente en el Sistema Operativo.

Para poder ejecutar "bytecode" Java, hace falta tener instalado un entorno de ejecución Java o JRE (por Java Runtime Environment). El JRE proporciona unas librerías básicas, una máquina virtual Java para la plataforma instalada y plugins para navegadores, entre otras cosas. Un kit de desarrollo Java o JDK (por Java Development Kit) agrega herramientas para programación, como un compilador para bytecode y un depurador ("debugger").

2.  Antes de comenzar

Instalaciones existentes

Para las instalaciones existentes, aunque no haya instalado algo de Java antes, asegúrese de seguir la Guía de Actualización Java .

Instalaciones nuevas

Las instalaciones nuevas no requieren preparación previa.

3.  Instalando una máquina virtual

Las opciones

Gentoo proporciona numerosos entornos para ejecución (JREs) y entornos para el desarrollo (JDKs). Entre las opciones actuales tenemos:

Origen JDK JRE
Kit Java Blackdown dev-java/backdown-jdk dev-java/blackdown-jre
Kit Java Sun dev-java/sun-jdk dev-java/sun-jre-bin
Kit Java IBM dev-java/ibm-jdk-bin dev-java/ibm-jre-bin
Kit de desarrollo J2SE de BEA WebLogic dev-java/jrockit-jdk-bin

Instalar un JRE/JDK

Para instalar el JDK predeterminado de su perfil, puede ejecutar emerge virtual/jdk. O para instalar el JRE predeterminado de su perfil ejecute emerge virtual/jre.

En eventos recientes, Sun ha cambiado la licencia de sus JDK y JRE a unos términos muchos más amistosos para las distribuciones Linux. Como resultado, los lanzamientos de Sun a partir de la versión 1.5 son libremente descargables, sin molestias adicionales.

Nota: Un JDK incluye también un JRE, así que si instala un JDK no debería tener que instalar un JRE.

Instalando máquinas virtuales con restricciones de descarga

Como mencionamos anteriormente, algunos JDK y JRE requieren que uno salte varios aros antes de poder instalar. Sencillamente haga emerge a estos paquetes de la manera acostumbrada. Los ebuilds le indicarán a dónde ir y qué descargar. Algunos de los JDKs y JREs requieren algunos rodeos antes de ser instalados. Simplemente haga emerge de los que paquetes que normalmente instalaría. Los ebuilds le indicarán qué debe hacer y qué debe descargar.

Debe descargar el(los) fichero(s) indicado(s) a /usr/portage/distfiles. Una vez allí, vuelva a ejecutar el comando emerge y los JRE/JDK empezarán a ser instalados.

4.  Configurar su máquina virtual

Introducción

Gentoo permite tener instalados múltiples JDKs y JREs sin que esto cause conflictos.

Si tiene acceso como superusuario, puede usar la herramienta java-config puede establecer la configuración por defecto del sistema. Los usuarios también pueden usar java-config para establecer su configuración personal.

Nota: También puede usar eselect para cambiar la máquina virtual del sistema y del usuario. Vea eselect java-vm help.

Establecer una máquina virtual predeterminada

El comando java-config --list-available-vms producirá una lista de los JREs y JDKs instalados en el sistema. A continuación se muestra un ejemplo de la salida de ese comando:

Listado de Código 4.1: Listar las máquinas virtuales disponibles

# java-config --list-available-vms
The following VMs are available for generation-2:
1)      Blackdown JDK 1.4.2.03 [blackdown-jdk-1.4.2] (Sólo Build)
2)      Blackdown JRE 1.4.2.03 [blackdown-jre-1.4.2] (Sólo Build)
3)      IcedTea6-bin 1.4.1 [icedtea6-bin]
4)      Sun JDK 1.5.0.20 [sun-jdk-1.5] (Build Only)
*)      Sun JDK 1.6.0.16 [sun-jdk-1.6]

Nota: Las máquinas virtuales marcadas con Sólo Build pueden contener vulnerabilidades en la seguridad y/o ser EOL (End Of Life). Gentoo recomienda no configurarlas como máquinas virtuales de sistema o usuario . Por favor, lea Máquinas Virtuales Sólo Build para más información.

El asterisco * indica que ésta es la máquina virtual activa (la del sistema o la del usuario cuando está configurada). El nombre entre corchetes ([]) es el alias, o identificador para esa máquina virtual (MV). Puede usarse el alias o el número identificador con el comando java-config --set-system-vm. A continuación, un ejemplo de cómo establecer la MV del sistema:

Listado de Código 4.2: Establecer la MV del sistema

(Mediante alias (opción preferida))
# java-config --set-system-vm blackdown-jdk-1.4
Now using blackdown-jdk-1.4 as your generation-2 system JVM
WARNING: blackdown-jdk-1.4 is marked as a build-only JVM. Using this vm is not recommended.
(Mediante el número identificador)
# java-config --set-system-vm 5
Now using sun-jdk-1.6 as your generation-2 system JVM

Como usuario normal puede utilizar java-config --set-user-vm.

Nota: Ya no tiene que regenerar el perfil con source activar las actualizaciones hechas a la MV del sistema o del usuario.

Máquinas Virtuales Sólo Build

Algunas máquinas virtuales están marcadas como Sólo Build ya que no son mantenidas (EOL: End Of Life) y/o contienen vulnerabilidades de seguridad. Estas máquinas virtuales no serán usadas automáticamente por Gentoo para correr aplicaciones que usen los lanzadores de Gentoo pero seguirán disponibles para ser usadas por el entorno de construcción (Build) ya que algunos paquetes pueden necesitarlas para ser construidos. El ajuste de estas máquinas virtuales para su sistema o usuario está muy desaconsejado ya que estas máquinas virtuales serán usadas cuando se lancen los ejecutables /usr/bin/{java,javac,..} y también serán usados por cualquier paquete que no use los scripts de lanzamiento de Gentoo.

MV de preferencia

Cuando esté instalando paquetes de Java, la MV puede y será cambiada si fuese necesario.

Debido a la amplia variedad de MVs disponibles, no tenemos los recursos para probar y verificar que todos los paquetes funcionen con todas ellas. Así que para asegurar que todo paquete instale sin problemas, hemos definido una lista de MVs predeterminadas/soportadas por arquitectura. Puede encontrarlas en /usr/share/java-config/config/jdk-defaults.conf. Cuando esté instalando un paquete Java y este detecte una de las máquinas virtuales en aquel fichero, usará automáticamente dicha MV en vez de la MV del sistema.

El cambio de MV al momento de instalar paquetes también es necesario cuando, por ejemplo, su MV del sistema está configurada como una MV 1.4 y el paquete que está instalado necesita una MV 1.5. Al instalar el paquete se usará la MV 1.5 preferida dejando intacta su elección de la máquina virtual del sistema.

Por supuesto, en Gentoo todo se trata acerca de elegir, así que puede hacer caso omiso de las opciones predeterminadas en /etc/java-config-2/build/jdk.conf y tener control total sobre cuál MV será usada. Algunos ejemplos:

Listado de Código 4.3: Ejemplo de /etc/java-config-2/build/jdk.conf

(Siempre quiero usar sun-jdk, es decir, sun-jdk-1.4 para 1.4, sun-jdk-1.5 para 1.5, etc)
*=sun-jdk

Listado de Código 4.4: Ejemplo de /etc/java-config-2/build/jdk.conf

(Use siempre sun-jdk-1.5 donde sea posible, excepto cuando se requiera explícitamente de una MV 1.4 ó 1.3)
*=sun-jdk-1.5

Listado de Código 4.5: Ejemplo de /etc/java-config-2/build/jdk.conf

# Para 1.3 prefiero sun-jdk 1.4, pero cuando no esté disponible, use ibm-jdk-bin.
# Para 1.4, use blackdown-jdk, y para 1.5, use sun-jdk
1.3=sun-jdk-1.4 ibm-jdk-bin
1.4=blackdown-jdk
1.5=sun-jdk

Aviso: No es obligatorio editar este fichero. Si cambia estas opciones para usar una MV no soportada, es posible que rompa algo. Los fallos reportados que mencionen el uso de una MV no soportada tendrán baja prioridad si no se informan con MV soportadas.

5.  Compiladores

El compilador estándar Java usado es javac, el cual viene en cada JDK. Aparte de configurar la MV utilizada en tiempo de compilación, también es posible configurar qué compilador se usará. Esencialmente, puede definir una lista de preferencias para especificar qué compilador será usado en /etc/java-config-2/build/compilers.conf.

Listado de Código 5.1: /etc/java-config-2/build/compilers.conf

# If the ebuild supports it
# it will check the COMPILERS var front to back and
# use the first compiler that is installed

COMPILERS="ecj-3.1 jikes javac"

Algunos compiladores no ofrecen soporte a todos los posibles argumentos de -target y -source. Por lo tanto, cada compilador en la lista es chequeado para ver si soporta el -source/-target deseado. javac funcionará en todos los casos, así que si no se encuentra un compilador adecuado, éste será usado en cambio.

A continuación se proporcionan más detalles sobre cada compilador:

Nombre Alias Paquete Descripción
javac javac N/D Este es el compilador por defecto que será usado y viene en cada JDK.
jikes jikes dev-java/jikes Jikes fue desarrollado originalmente por IBM. Anecdóticamente es, en general, más rápido que javac. Observe, sin embargo, que es más pedante y fallará en ciertos casos donde javac no tiene problemas. Todavía no soporta la sintaxis de Java 1.5.
Compilador Eclipse para Java ecj-3.1 =dev-java/eclipse-ecj-3.1* ECJ es el compilador usado por el kit de desarrollo de software Eclipse. Es pleno de características y además muy rápido. Ofrece soporte a la sintáxis de Java 1.5.

6.  Establecer el CLASSPATH predeterminado

Aviso: Las opciones explicadas en esta sección deben ser consideradas como obsoletas y probablemente serán eliminadas en el futuro. Recomendamos encarecidamente no usarlas, porque sus proyectos o aplicaciones Java deberían manejar sus propios "classpaths". Si elige especificar un CLASSPATH predeterminado, algunas aplicaciones podrían comportarse de modo inesperado ya que las clases que no se suponen ahí, lo estarán en el "classpath".

java-config también puede ser usado para establecer el CLASSPATH predeterminado del sistema, así como, el CLASSPATH predeterminado para un usuario específico.

Primero, querrá listar las bibliotecas Java disponibles instaladas en su sistema y que puede querer colocar en su CLASSPATH. A continuación un ejemplo de la salida del comando:

Listado de Código 6.1: Listar las clases

# java-config --list-available-packages
[xerces-2] The next generation of high performance, fully compliant XML parsers in the Apache Xerces family (/usr/share/xerces-2/package.env)
[junit] Simple framework to write repeatable tests (/usr/share/junit/package.env)
[bsh] BeanShell: A small embeddable Java source interpreter (/usr/share/bsh/package.env)
[bcel] The Byte Code Engineering Library: analyze, create, manipulate Java class files (/usr/share/bcel/package.env)
[log4j] A low-overhead robust logging package for Java (/usr/share/log4j/package.env)
...

Nuevamente, los nombres entre corchetes ([]) son los identificadores a pasar como argumentos a java-config --set-system-classpath. A continuación un ejemplo:

Listado de Código 6.2: Establecer el classpath

# java-config --set-system-classpath log4j,xerces-2

Nota: El directorio actual (.) no será parte del classpath del sistema pues debería ser agregado en el perfil de ingreso de su sistema.

Tendrá que actualizar su entorno ya sea reingresando o regenerando el fichero /etc/profile.

Para los usuarios, java-config --set-user-classpath creará ~/.gentoo/java-env-classpath, el cual debería regenerar desde su perfil del shell.

Listado de Código 6.3: Regenerar el classpath específico de un usuario

if [[ -f "${HOME}/.gentoo/java-env-classpath" ]]; then
       source ${HOME}/.gentoo/java-env-classpath
fi

Si realmente quiere un classpath predeterminado para el sistema o el usuario, puede agregar algo como lo siguiente a su perfil del shell, aunque le aconsejamos no hacerlo.

Listado de Código 6.4: Establecer el classpath

# export CLASSPATH="${CLASSPATH}:$(java-config --classpath log4j,xerces-2)"

7.  Plugins Java para los navegadores

Instalando un plugin

Puede instalar un plugin Java para el navegador haciendo emerge a una máquina virtual Java con el parámetro USE nsplugin activado.

Nota: nsplugin no está disponible para todas las arquitecturas. Revise si el soporte para la arquitectura deseada está disponible antes de intentar instalar una MV ejecutando emerge -pv <java-vm>.

Portage permitirá la instalación de múltiples versiones de plugins Java plugins, aunque solo uno será usado por el navegador. Puede revisar la lista de plugins disponibles con:

Listado de Código 7.1: Visualizando los plugins disponibles

# eselect java-nsplugin list
   [1]   sun-jre-bin-1.6
   [2]   icedtea6-bin

En este ejemplo, el plugin del navegador seleccionado es sun-jre-bin.

Listado de Código 7.2: Seleccionando un plugin

# eselect java-nsplugin set sun-jre-bin-1.6

Verifique que el plugin correcto ha sido seleccionado:

Listado de Código 7.3: Verificando el plugin correcto

# eselect java-nsplugin list
   [1]   sun-jre-bin-1.6  current
   [2]   icedtea6-bin

El sitio java.com proporciona un enlace para verificar el plugin instalado. Además, si está usando un navegador basado en Mozilla, puede verificar el plugin Java escribiendo about:plugins en la línea para direcciones.

Plugins en sistemas con múltiples librerías

Si está usando un sistema multilib con librerías de 64 y 32 bits (por ejemplo, en un AMD64), puede tener instalados ambos plugin Java, de 64 y de 32 bits. A menos que tenga una necesidad imperiosa de ejecutar aplicaciones de 32 bits, le recomendamos usar plugins nativas de 64 bits en navegadores web de 64 bits.

Hay disponibles varias plugins para navegador de 64 bits. La pareja por defecto, sun-jdk y sun-jre-bin, incluyen ambas plugins para navegador. Simplemente haga emerge de una de ellas con el ajuste USE nsplugin activado.

Listado de Código 7.4: Installing a 64-bit plugin

# echo "dev-java/sun-jre-bin nsplugin" >> /etc/portage/package.use
# emerge sun-jre-bin

Para usar un plugin de 32 bits en un navegador de 32 bits, necesitará hacer emerge de emul-linux-x86-java con el ajuste USE nsplugin activado.

Listado de Código 7.5: Instalando un plugin de 32 bits

# echo "app-emulation/emul-linux-x86-java nsplugin" >> /etc/portage/package.use
# emerge emul-linux-x86-java

Luego revise cuales plugins estan disponibles:

Listado de Código 7.6: Viendo cuales plugins estan disponibles

# eselect java-nsplugin list
Available 32-bit Java browser plugins
  [1]   emul-linux-x86-java-1.5
  [2]   emul-linux-x86-java-1.6
Available 64-bit Java browser plugins
  [1]   icedtea6-bin
  [2]   sun-jre-bin-1.6

Ahora seleccione el plugin adecuado para su navegador:

Listado de Código 7.7: Seleccionando los plugins

# eselect java-nsplugin set 32bit emul-linux-x86-java-1.5

Verifique que los plugins correctos han sido seleccionados:

Listado de Código 7.8: Verificando los plugins correctos

# eselect java-nsplugin list
Available 32-bit Java browser plugins
  [1]   emul-linux-x86-java-1.5
  [2]   emul-linux-x86-java-1.6  current
Available 64-bit Java browser plugins
  [1]   icedtea6-bin
  [2]   sun-jre-bin-1.6  current

8.  Parámetros USE para usar con Java

Configurar los parámetros USE

Para más información acerca de los parámetros USE, puede consultarse el capítulo acerca de Parámetros USE del Manual Gentoo.

Los parámetros USE

9.  Recursos Adicionales

Recursos fuera de línea

Recursos en línea