Oracle anuncia el lanzamiento de Java 17.
La última versión de soporte a largo plazo de Java ofrece miles de actualizaciones, mejorando aún más el lenguaje y la plataforma para ayudar a los desarrolladores a ser más productivos.
Java 17
Oracle anunció hoy la disponibilidad de Java 17 la última versión de la plataforma de lenguaje de programación y desarrollo número uno del mundo. Java 17 ofrece miles de actualizaciones de rendimiento, estabilidad y seguridad, así como 14 JEPs (propuestas de mejora de JDK) que mejoran aún más el lenguaje y la plataforma Java para ayudar a los desarrolladores a ser más productivos.
Java 17 es la última versión de soporte a largo plazo (LTS) dentro la cadencia de lanzamiento semestrales de Java y es el resultado de una amplia colaboración entre los ingenieros de Oracle y otros miembros de la comunidad global de desarrolladores de Java a través de la Comunidad Open JDK y el Proceso de la Comunidad Java (JCP). Desde el lanzamiento del anterior JDK 11 LTS hace tres años, se han implementado más de 70 JEP.
Oferta de una licencia más sencilla
Oracle JDK 17 y las versiones futuras de JDK están destinadas a simplificar las licencias y los derechos de Java. Se proporcionan bajo una licencia gratuita para su uso hasta un año completo después del lanzamiento de la próxima versión, LTS. Oracle también planea continuar proporcionando versiones de Oracle OpenJDK bajo la licencia Publica General (GPL) de código abierto, como lo ha hecho desde 2017.
Mejora del soporte y atención al cliente a largo plazo
Oracle está colaborando con la comunidad de desarrolladores de Java y JCP para mejorar la programación de LTS para brindar a las organizaciones más flexibilidad sobre cuándo, o si, desean migrar a una versión más reciente de Java LTS. Oracle propone que la próxima versión LTS sea Java 21 y planea que esté disponible en septiembre de 2023, lo que cambiará la cadencia de versiones LTS de tres a dos años.
Con el respaldo de suscripción de Oracle LTS y Java SE, los clientes podrán migrar a Java 17 al ritmo que mejor se adapte a sus necesidades. Oracle proporcionará a los clientes actualizaciones de seguridad, rendimiento y corrección de errores para Java 17 hasta al menos septiembre de 2029.
“En los últimos tres años, hemos escuchado cuánto aman los desarrolladores las últimas funcionalidades y características, y hemos visto que el ecosistema realmente adopta la cadencia de lanzamiento de seis meses”, dijo Georges Saab, vicepresidente de desarrollo de Java Platform Group de Oracle. “Uno de los mayores desafíos a los que se enfrentan los desarrolladores de Java hoy en día es que su organización sólo les permite usar la última versión de LTS. Al trasladar las versiones de LTS a cada dos años, los desarrolladores que trabajan con organizaciones conservadoras ahora tienen más opciones y acceso a las funciones que aman y quieren usar”.
“Oracle está realizando cambios que beneficiarán significativamente a la comunidad Java al cambiar las versiones de soporte a largo plazo a una cadencia de dos años e introducir una licencia nueva y más flexible que proporciona el uso gratuito de Oracle JDK en producción durante un tiempo prolongado”, dijo el Dr. Arnal Dayaratna, vicepresidente de investigación y Desarrollo de Software de IDC. “Estos cambios darán a las organizaciones una mayor flexibilidad para gestionar la complejidad del desarrollo e implementación de aplicaciones modernas en la nube, en las instalaciones y en entornos híbridos”.
Acelerando la adopción de Java en la nube
Java es una de las plataformas de desarrollo más exitosas de todos los tiempos y se basa en innovaciones continuas que satisfacen las necesidades cambiantes de los desarrolladores. Para acelerar la adopción de Java en la nube, Oracle presentó recientemente Oracle Java Management Service,un nuevo servicio nativo de Oracle Cloud Infrastructure(OCI), para ayudar a las organizaciones a administrar los tiempos de ejecución de Java y las aplicaciones en las instalaciones o en cualquier nube.
Java Management Service ofrece a los clientes visibilidad de sus implementaciones de Java en toda la empresa. Esto abarca todas las versiones de Java instaladas en su entorno, incluidas las versiones de Java que se ejecutan en desarrollo y producción. También destaca cualquier aplicación Java no planificada que se está ejecutando y verifica que todas las versiones instaladas estén actualizadas con los últimos parches de seguridad.
JDK 17 incluye nuevas mejoras de lenguaje, actualizaciones de bibliotecas, compatibilidad con los nuevos ordenadores Apple, eliminación y mudanza de características heredadas, y trabajo para ayudar a garantizar que el código Java escrito hoy continúe funcionando sin cambios en futuras versiones de JDK. También proporciona una vista previa de características del lenguaje y la incubación API para recopilar comentarios de la comunidad Java. Las actualizaciones incluyen:
Mejora del lenguaje Java
JEP 409: Clases selladas – Las clases e interfaces selladas restringen otras clases o interfaces que pueden extenderlas o implementarlas. Esta mejora es una más del Proyecto Amber, que tiene como objetivo aumentar laproductividad de los desarrolladores a través de la evolución del lenguaje Java.
Actualizaciones y mejoras en las bibliotecas.
JEP 306: Restaurar la semántica de punto flotante siempre estricta – El lenguaje de programación Java y la máquina virtual Java originalmente solo tenían una semántica estricta de punto flotante. A partir de Java 1.2, se permitieron pequeñas variaciones en esta semántica estricta de forma predeterminada para adaptarse a las limitaciones de las arquitecturas de hardware de entones. Estas variaciones ya no son útiles ni necesarias, por lo que fueron eliminadas por la JEP 306.
JEP 356: Generador de números pseudoaleatorios mejorado – Proporciona nuevos tipos de interfaz e implementaciones para generadores de números pseudoaleatorios (PRNG por sus siglas en inglés). Este cambio mejora la interoperabilidad de diferentes PRNG y facilita la solicitud de un algoritmo basado en requisitos en lugar de codificar una implementación específica.
JEP 382: Nueva pipeline de renderizado de macOS – implementa una pipeline Java 2D para macOS utilizando la API de Apple Metal. La nueva canalización reducirá la dependencia de JDK de la obsoleta API OpenGL de Apple.
Nueva compatibilidad con plataformas.
JEP 391: Puerto macOS AArch64 – Puertos JDK para la plataforma macOS / AArch64. Este puerto permitirá que las aplicaciones Java se ejecuten de forma nativa en los nuevos ordenadores Apple Silicon basados en Arm 64.
Mudanzas y eliminaciones.
JEP 398: Descontinuar la API de Applet para su eliminación – Todos los proveedores de navegadores web han eliminado el soporte para los plugins del navegador Java o han anunciado planes para hacerlo. La API de Applet quedó obsoleta, pero no para su eliminación, en Java 9 en septiembre de 2017.
JEP 407: Eliminar la activación de RMI – Elimina el mecanismo de activación de invocación de método remoto (RMI), preservando el resto de la RMI.
JEP 410: Eliminar el compilador experimental AOT y JIT – El compilador experimental basado en Java ahead-of-time (AOT) y just-in-time (JIT) fueron características experimentales que no tuvieron mucha adopción. Al ser opcionales, ya se eliminaron de JDK 16. Este JEP elimina estos componentes del código fuente de JDK.
JEP 411: Obsolescencia del Security Manager para su eliminación – Security Manager se remonta Java 1.0. No ha sido el medio principal de proteger el código Java del lado del cliente durante muchos años, y rara vez se ha usado para proteger el código del lado del servidor. Eliminarlo en una versión futura ayudará a eliminar una carga de mantenimiento significativa y permitirá que la plataforma Java avance.
Programas Java a prueba de futuro.
JEP 403: Encapsular fuertemente los elementos internos de JDK – Ya no será posible relajar la fuerte encapsulación de elementos internos a través de una única opción de línea de comandos, como fue posible en JDK 9 hasta JDK 16. Podrá seguir accediendo a las API internas existentes, pero ahora requerirá enumerar, como parámetros de línea de comandos o atributos de manifiesto del archivo JAR, cada uno de los paquetes cuya encapsulación debe relajarse. Este cambio dará lugar a aplicaciones más seguras y menos dependencias en los detalles de implementación internos no estándar de JDK.
Previsualizaciones e incubadoras para versiones posteriores de JDK
JEP 406: Coincidencia de patrones para el switch (preview) – Permite probar una expresión en múltiples patrones, cada uno con una acción específica, de modo que las consultas complejas basadas en datos se pueden expresar de manera concisa y segura.
JEP 412: API de memoria y función externa (incubadora) – mejora las API de incubación introducidas en JDK 14 y JDK 15 que permiten a los programas Java interoperar con código y datos fuera del tiempo de ejecución de Java. Al invocar de manera eficiente funciones externas (es decir, código fuera de la JVM) y acceder de forma segura a la memoria externa, estas API permiten a los programas Java llamar a bibliotecas nativas y procesar datos nativos sin la fragilidad y complejidad de la interfaz nativa de Java (JNI). Estas APIs se están desarrollando en el marco del Proyecto Panamá que tiene como objetivo mejorar la interacción entre el código Java y el no Java.
JEP 414: API Vectorial (Segunda incubadora) – Le permite expresar cálculos vectoriales que se compilan de manera confiable en tiempo de ejecución para instrucciones vectoriales optimizadas en arquitecturas de CPU compatibles, logrando así un rendimiento superior a los cálculos de escala equivalentes.
Descarga e instala Oracle JDK Java 17 LTS en tu sistema operativo Linux.
Descarga Oracle JDK Java 17 LTS en https://www.oracle.com/cl/java/technologies/downloads/
Descargas del kit de desarrollo JDK 17.0.9
Los binarios de JDK 17 son de uso gratuito en producción y de redistribución gratuita, sin costo alguno, según los Términos y condiciones sin cargo de Oracle (NFTC).
JDK 17 recibirá actualizaciones bajo la NFTC, hasta septiembre de 2024. Las actualizaciones posteriores de JDK 17 se licenciarán bajo la licencia Java SE OTN (OTN) y el uso de producción más allá de las concesiones gratuitas limitadas de la licencia OTN requerirá una tarifa .
A continuación, descargue el paquete binario rpm de x64 para una fácil instalación de Oracle Java JDK 17 (LTS):
// Oracle Java JDK 17
$ wget -q https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm
// Instalar Oracle Java JDK 17
$ sudo dnf install jdk-17_linux-x64_bin.rpm
A continuación verificamos la instalación de Java comprobando que funciona en nuestro sistema y confirmando que es la versión Java de Oracle.
$ java --version
java 17.0.9 2023-10-17 LTS
Java(TM) SE Runtime Environment (build 17.0.9+11-LTS-201)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.9+11-LTS-201, mixed mode, sharing
Es posible que haya instalado varias versiones de Java en su sistema, puede cambiar y elegir una versión distinta.
Después de ejecutar este comando, verá una lista de todas las versiones de Java instaladas, seleccione la que quiere utilizar por defecto:
$ sudo alternatives --config java
Simplemente ingrese un número de selección para elegir qué ejecutable de Java debe usarse de forma predeterminada.
Configurar las variables de entorno en Java en Fedora 39
En este punto, debe configurar las variables de entorno Java en su ordenador con linux. Para hacer esto, puede usar el siguiente comando:
$ cat <<EOF | sudo tee /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/java/default
export PATH=\$PATH:\$JAVA_HOME/bin
EOF
Luego, aplique los cambios obteniendo su archivo con el siguiente comando:
$ source /etc/profile.d/jdk.sh
Comprobamos la creación del script de variables de entorno en Java.
$ cd /etc/profile.d/
/etc/profile.d$ ls
jdk.sh
Comprobamos que funciona el JDK Oracle y contesta el compilador y el intérprete de programas java.
Introducimos 2 comandos de java, el compilador (javac) y el intérprete de java (Java) para comprobar que contestan en la línea de órdenes.
// el compilador java
$ javac
Usage: javac
where possible options include:
@ Read options and filenames from file
-Akey[=value] Options to pass to annotation processors
--add-modules (,)*
Root modules to resolve in addition to the initial modules, or all modules
on the module path if is ALL-MODULE-PATH.
--boot-class-path , -bootclasspath
Override location of bootstrap class files
--class-path , -classpath , -cp
Specify where to find user class files and annotation processors
-d Specify where to place generated class files
-deprecation
Output source locations where deprecated APIs are used
--enable-preview
Enable preview language features. To be used in conjunction with either -source or --release.
-encoding Specify character encoding used by source files
-endorseddirs Override location of endorsed standards path
-extdirs Override location of installed extensions
-g Generate all debugging info
-g:{lines,vars,source} Generate only some debugging info
-g:none Generate no debugging info
-h
Specify where to place generated native header files
--help, -help, -? Print this help message
--help-extra, -X Print help on extra options
-implicit:{none,class}
Specify whether or not to generate class files for implicitly referenced files
-J Pass directly to the runtime system
--limit-modules (,)*
Limit the universe of observable modules
--module (,), -m (,)
Compile only the specified module(s), check timestamps
--module-path , -p
Specify where to find application modules
--module-source-path
Specify where to find input source files for multiple modules
--module-version
Specify version of modules that are being compiled
-nowarn Generate no warnings
-parameters
Generate metadata for reflection on method parameters
-proc:{none,only}
Control whether annotation processing and/or compilation is done.
-processor [,,…]
Names of the annotation processors to run; bypasses default discovery process
--processor-module-path
Specify a module path where to find annotation processors
--processor-path , -processorpath
Specify where to find annotation processors
-profile
Check that API used is available in the specified profile
--release
Compile for the specified Java SE release. Supported releases: 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
-s Specify where to place generated source files
--source , -source
Provide source compatibility with the specified Java SE release. Supported releases: 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
--source-path , -sourcepath
Specify where to find input source files
--system |none Override location of system modules
--target , -target
Generate class files suitable for the specified Java SE release. Supported releases: 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
--upgrade-module-path
Override location of upgradeable modules
-verbose Output messages about what the compiler is doing
--version, -version Version information
-Werror Terminate compilation if warnings occur
// El intérprete java.
$ java
Usage: java [options] [args…]
(to execute a class)
or java [options] -jar [args…]
(to execute a jar file)
or java [options] -m [/] [args…]
java [options] --module [/] [args…]
(to execute the main class in a module)
or java [options] [args]
(to execute a single source-file program)
Arguments following the main class, source file, -jar ,
-m or --module / are passed as the arguments to
main class.
where options include:
-cp <class search path of directories and zip/jar files>
-classpath <class search path of directories and zip/jar files>
--class-path <class search path of directories and zip/jar files>
A : separated list of directories, JAR archives,
and ZIP archives to search for class files.
-p <module path>
--module-path <module path>...
A : separated list of directories, each directory
is a directory of modules.
--upgrade-module-path <module path>...
A : separated list of directories, each directory
is a directory of modules that replace upgradeable
modules in the runtime image
--add-modules <module name>[,<module name>...]
root modules to resolve in addition to the initial module.
<module name> can also be ALL-DEFAULT, ALL-SYSTEM,
ALL-MODULE-PATH.
--enable-native-access <module name>[,<module name>...]
modules that are permitted to perform restricted native operations.
<module name> can also be ALL-UNNAMED.
--list-modules
list observable modules and exit
-d <module name>
--describe-module <module name>
describe a module and exit
--dry-run create VM and load main class but do not execute main method.
The --dry-run option may be useful for validating the
command-line options such as the module system configuration.
--validate-modules
validate all modules and exit
The --validate-modules option may be useful for finding
conflicts and other errors with modules on the module path.
-D<name>=<value>
set a system property
-verbose:[class|module|gc|jni]
enable verbose output for the given subsystem
-version print product version to the error stream and exit
--version print product version to the output stream and exit
-showversion print product version to the error stream and continue
--show-version
print product version to the output stream and continue
--show-module-resolution
show module resolution output during startup
-? -h -help
print this help message to the error stream
--help print this help message to the output stream
-X print help on extra options to the error stream
--help-extra print help on extra options to the output stream
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
enable assertions with specified granularity
-da[:<packagename>...|:<classname>]
-disableassertions[:<packagename>...|:<classname>]
disable assertions with specified granularity
-esa | -enablesystemassertions
enable system assertions
-dsa | -disablesystemassertions
disable system assertions
-agentlib:<libname>[=<options>]
load native agent library <libname>, e.g. -agentlib:jdwp
see also -agentlib:jdwp=help
-agentpath:<pathname>[=<options>]
load native agent library by full pathname
-javaagent:<jarpath>[=<options>]
load Java programming language agent, see java.lang.instrument
-splash:<imagepath>
show splash screen with specified image
HiDPI scaled images are automatically supported and used
if available. The unscaled image filename, e.g. image.ext,
should always be passed as the argument to the -splash option.
The most appropriate scaled image provided will be picked up
automatically.
See the SplashScreen API documentation for more information
@argument files
one or more argument files containing options
-disable-@files
prevent further argument file expansion
--enable-preview
allow classes to depend on preview features of this release
To specify an argument for a long option, you can use --= or -- .
Eliminar jdk 17
En caso de querer desinstalar el Oracle JDK Java 17 del sistema, introduciremos este comando:
$ dnf remove jdk-17_linux-x64_bin.rpm
$ cd /etc/profile.d/
$ rm jdk.sh
Conclusión
Java es un lenguaje y entorno de programación de propósito general para desarrollar y ejecutar una amplia gama de programas. En este artículo, mostramos cómo instalar Java ( Oracle JDK ) en Fedora Linux y que funcione perfecto con el binario RPM x64 de Oracle.