Ceylon: Interoperabilidad con Java

Ceylon nos permite la interoperabilidad con Java, podemos importar sus librerías e integrarlas a nuestro código. En este post haremos un ejemplo de como importar librerías de Java a nuestro código Ceylon.

En este caso no usaremos ningún IDE, usaremos la consola de comandos (en mi caso uso Linux). Crearemos una estructura de directorios similar a esta:

Tendremos estos tres archivos con la extensión *.ceylon:

  1. run.ceylon
  2. module.ceylon
  3. package.ceylon

Dentro de cada archivo escribiremos:

run.ceylon
 

module.ceylon

 

package.ceylon
 

Ahora volvemos al archivo run.ceylon e importamos la librería java.util.HashMap de Java.

run.ceylon
 

Compilamos:
 

Cuando compilamos se crea un directorio más o menos así:

Ejecutamos: 

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

Archivos

Una explicación rápida de esos archivos:

El car es un Ceylon ARchive (así como un jar es un Java ARchive). Ahí vienen los .class y algunos metadatos para la carga de módulos en tiempo de ejecución.

El src es un zip con los fuentes de tu módulo.

El car.idx y car.index son creo que para OSGi.

Los sha1 son los checksums con SHA-1 de los demás archivos.

Imagen de Cid

Que usaron para modularizar ?

Entonces Ceylon utiliza OSGi para modularizar o solo es compatible con OSGi ?

Imagen de ezamudio

compatible

Es compatible con OSGi. Y también con Maven. Pero el sistema de módulos de Ceylon se implementa con JBoss Modules.

Imagen de Sr. Negativo

gracias por la explicación

Gracias por la explicación de esos archivos @ezamudio.

Imagen de ezamudio

por cierto

El esquema que usamos para importar módulos de Java es ya con los nombres propuestos para Jigsaw. Es decir java.base solamente te trae lo más básico de Java, sin base de datos ni parsers de XML ni interfaces gráficas, etc.

Aquí hay más info al respecto:

Imagen de Sr. Negativo

package.desktop

Buen tip. Ya empecé a probar algunas cosas más.

module.ceylon
 

package.ceylon
 

run.ceylon