Skip to content

Latest commit

 

History

History
115 lines (78 loc) · 5.07 KB

File metadata and controls

115 lines (78 loc) · 5.07 KB

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.