Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

External libraries ejemplo

En este ejemplo incluimos librerias externas, las cuales no han sido aún modularizadas. Estos archivos jar (jar files) pueden ser convertidos en lo que se llama [módulos automáticos]([automatic modules](The State of the Module System) The State of the Module System))* por javac. Para tener una idea de como estos módulos lucirán y cuales dependencias ellos van a requerir usted puede utilizar la herramienta jar:

$ jar -d --file=lib/junit-4.12.jar
No module descriptor found. Derived automatic module.

module [email protected] (automatic)
  requires mandated java.base
   contains junit.extensions
   contains junit.framework
   contains junit.runner
   contains junit.textui
   contains org.junit
   ...

Esta salida nos dice, que el módulo automático será llamado junit y va a tener el número de versión 4.12. Desafortunadamente no nos dice, que JUnit depende de Hamcrest. Nosotros podemos obtener mas informacion utilizando jdeps:

$ jdeps -s lib/junit-4.12.jar 
junit-4.12.jar -> java.base
junit-4.12.jar -> java.management
junit-4.12.jar -> not found

La última entrada not found nos dice que hay una dependencia desconocida. La opción -s en la instrucción anterior solicita que solo sea mostrado el resumen. Para ver mas detalles, vamos a omitir la opción -s así:

$ jdeps lib/junit-4.12.jar | grep "not found"
junit-4.12.jar -> not found
   org.junit                                          -> org.hamcrest                                       not found
   org.junit.experimental.results                     -> org.hamcrest                                       not found
   org.junit.internal                                 -> org.hamcrest                                       not found
   org.junit.internal.matchers                        -> org.hamcrest                                       not found
   org.junit.matchers                                 -> org.hamcrest                                       not found
   org.junit.matchers                                 -> org.hamcrest.core                                  not found
   org.junit.rules                                    -> org.hamcrest                                       not found

Aha! Hamcrest es mostrado. Y también se ve, que no hay otras dependencias desconocidas de Junit. Vamos a verificar Hamcrest para estar seguros:

$ jar -d --file=lib/hamcrest-core-1.3.jar
o module descriptor found. Derived automatic module.

module [email protected] (automatic)
  requires mandated java.base
  contains org.hamcrest
  contains org.hamcrest.core
  contains org.hamcrest.internal

y

$ jdeps -s lib/hamcrest-core-1.3.jar
hamcrest-core-1.3.jar -> java.base

Bien, Hamcrest no tiene más dependencias.

Ejecute los siguientes comandos para ver el contenido de los códigos fuente contenidos en el directorio src :

$ cat src/com.greetings/module-info.java
$ cat src/com.greetings/main/java/com/greetings/Main.java
$ cat src/com.greetings/main/java/com/greetings/Greet.java
$ cat src/com.greetings/test/java/com/greetings/GreetTest.java 

Como usted puede ver en el module-info.java, hemos adicionado una dependencia para JUnit utilizando el nombre de módulo devuelto en los comandos ejecutados con anterioridad. Hamcrest es una dependencia transitiva (transitive dependency) y no tiene que ser adicionada de manera separada. También, desde JUnit tendremos acceso a nuestras clases para ejecutar pruebas, nosotros exportamoscom.greetings para el módulo JUnit.

Nota: en caso de que alguno de los anteriores scripts .sh falle debido al comando tree, por favor vea la sección Descargue e instale los comandos tree y wget en el documento README.md y aplique la solución apropiada.

Usted puede ver la información de dependencias ejeuctando el comando:

$ ./deps.sh

Intente compilar los módulos utilizando el siguiente comando:

$ ./compile.sh

Y ejecute los ejemplos con el siguiente comando:

$ ./run.sh

Deberiamos obtener la siguiente salida:

     *** Running from within the mods folder without arguments. *** 
    
    Hello World!
    
     *** Running from within the mods folder with arguments. *** 
    
    Hello Alice!
    Hello Bob!
    Hello Charlie!
    
     *** Running tests *** 
    
    JUnit version 4.12
    .....
    Time: 0.009
    
    OK (5 tests)

Revise el contenido the los scripts (use el comando cat o un editor de texto) para ver que hacen y porque - instrucciones interesantes e información encontrará en cada uno.

Vea ../../01_Greetings/es/README.md para aprender mas acerca de la convención de nombres de paquete y módulos y como evitar confusiones.

Ver el ejemplo: Para ver los códigos fuentes de este ejemplo vaya a el directorio 09_Automodules, ahí encontrará la versión en Inglés del presente documento, el directorio src con los códigos fuentes, y algunos scripts que identificará con la extensión .sh.