Buscar
Social
Ofertas laborales ES
« Nueva versión del índice TIOBE: Java sigue segundo detrás de C | Main | El 42% de los usuarios de este portal no tiene su JVM actualizada »
viernes
may112012

Ya puedes probar Java 8 con Jigsaw: disponible Java 8 Developer Preview

Nos acaba de informar @greeneyed_dlj a través de Twitter que una versión Developer Preview de Java 8 que incluye el proyecto Jigsaw está disponible para descarga, lo cual quiere decir que ya podemos probar uno de los dos principales cambios que va a traer Java 8 (el otro son las closures).

El soporte de modularidad permitirá dividir aplicaciones en módulos que puedan cargarse de forma independiente; estos módulos pueden tener dependencias entre sí. Lo importante de esto para nosotros los programadores es que podremos librarnos del jar hell, el típico escenario donde tenemos en nuestro proyecto varias versiones de una misma librería y no hay forma de especificar que para cierta parte de nuestra aplicación necesitamos X versión y para otra, Y.

Además Jigsaw mejorará la mantenibilidad y la encapsulación de nuestra aplicación porque, en teoría, podríamos tener módulos poco acoplados entre sí. Por lo que podríamos hacer cambios dentro de uno, minimizando el impacto de estos cambios ya que los modulos dependerían entre sí sólo a través del contrato público especificado para cada uno. 

Java resolverá los módulos en tiempo de:

  1. Compilación
  2. Instalación. Si usas algun servidor que tenga módulos preinstalados, Java los encontrará cuando instales tu aplicación en él.
  3. Ejecución. Java será capaz de encontrar de forma dínamica y en tiempo de ejecución los módulos de los que depende tu aplicación.

 

Por defecto, los módulos se declararán en un archivo llamado module-info.java y tendrán la siguiente estructura:

module foo @ 1.0 {           //declara un módulo y su versión
    exports foo;             //declara que este módulo exporta las clases en el paquete foo
}
module bar {
    requires public foo;    // Re exporta los tipos exportados por foo
}
module baz {
    requires bar @ >= 1.0;           // Declara dependencia al módulo bar, versiones 1.0 o superiores
    class baz.Main           //declara la clase de entrada al módulo
}

Podéis leer sobre el proyecto Jigsaw en más detalle en esta noticia publicada por Erick.

¿Creéis que esta nueva funcionalidad de Java 8 os será muy útil?


PrintView Printer Friendly Version

EmailEmail Article to Friend

Reader Comments (5)

Tengo la sospecha bien fundada de que en cuanto esté disponible la versión GA de JavaSE 1.8, allá por el verano del año que viene... todavía se estará discutiendo sobre la conveniencia de actualizarse a la última versión de Java SE 1.6ux, que estará obsoleta por entonces.

En mi caso, puesto que uso NetBeans Platform, estoy acostumbrado al diseño modular, y conceptos como "eager" y "autoload", "load and unload", relativos a módulos, son habituales. No me encontraré con un cambio de mentalidad sustancial, en cuanto comience a usar esta nueva versión de JavaSE.

Mi principal interés es el Proyecto Lambda, para lo que ya llevo cierto tiempo haciendo cambios en el código, con vistas a una intensa refactorización, en cuanto me decida a usar JavaSE 1.8 como plataforma por defecto. No antes del año que viene.

mayo 11, 2012 | Registered Commenterchoces

Pues la verdad, a nivel de código, no me termina de convencer. Me gusta un sistema modular, pero más dinámico, como por ejemplo, OSGi, donde toda la definición modular y dependencias se hace en el archivo MANIFEST.

Saludos...

mayo 12, 2012 | Unregistered CommenterJuan

@Juan

Creo que ésto responde a tu dudas:

"Module declarations alongside source code — It must be easy for developers to both write and read module declarations. The Java language syntax must be extended to define declarations of module metadata. The syntax and, to the degree possible, the semantics of module declarations must be specified in the Java Language Specification. A module declaration must be written in a file that resides with the module’s source content, rather than in a side file in some other format or, even worse, a set of command-line arguments baked into a build script."

http://openjdk.java.net/projects/jigsaw/doc/draft-java-module-system-requirements-12

Hay en este blog, unos comentarios bastante interesantes sobre el tema:

http://njbartlett.name/2011/05/27/jdk8-modularity-requirements.html

"The second point of note is that the requirements for this new module system are really not that far from OSGi itself! Aside from cosmetic differences, such as the location and format of module metadata, the general goals are quite closely aligned and achievable with OSGi. For example, I think that if there were a strong desire to encode metadata in a file named “module-info.java” instead of a file named “MANIFEST.MF” then an agreement could be reached within the auspices of the OSGi Alliance."

mayo 13, 2012 | Registered Commenterchoces

Como dice Juan, me parece que OSGi está mejor preparado para aportar una modularidad real sobre Java.

Si bien es cierto, que con el tiempo se busca que Jigsaw y OSGi puedan ser compatibles entre ellos como bien explica Neil Bartlett en la charla del último OSGi Dev Conf (http://njbartlett.name/2011/05/27/jdk8-modularity-requirements.html)

mayo 14, 2012 | Unregistered CommenterAntonio

No perdamos de vista que Jigsaw es una especificación del lenguaje, que se implementa sobre el mismo JDK, mientras que OSGi es un contenedor que usa el JDK.

Hay más "vida" en contenedores modulares de la que se supone:

http://wiki.apidesign.org/wiki/NetBeans_Runtime_Container
http://wiki.apidesign.org/wiki/Equinox
http://wiki.apidesign.org/wiki/Netbinox

mayo 14, 2012 | Registered Commenterchoces

PostPost a New Comment

Enter your information below to add a new comment.

My response is on my own website »
Author Email (optional):
Author URL (optional):
Post:
 
Some HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>