miércoles, 5 de mayo de 2021

Gradle-7 (1) Crear una libraría jar. Utilizar Lombok y librerías jar locales

1. Introducción

2. Crear un proyecto desde Eclipse EE

3. Cambiar la versión de java a java 16 

4. build.gradle

5. Incluir una jar propio (local)

6. Generar el jar

7. Agregar la dependencia Lombok.jar

8. Resolución de problemas


1. Introducción

Se pretende migrar desde Maven a Gradle, para ello empezamos con un ejemplo sencillo y creamos una libreria jar, a la que añadiremos como dependencia una libreria jar lcal y también a Lombok que cuesta un poco más.

2. Crear un proyecto desde Eclipse EE

Desde el menú:

File-> New -> Gradle -> Gradle Project ->NEXT

Aparece una pantalla que dice "How to experience the best Gradle integration" y le damos NEXT

Le damos el nombre del proyecto (en mi caso "XimoProject") y seleccionamos "Use default location" y NEXT



Indicamos la version 7.0 de Gradle y  donde localizar el jdk y FINISH (ANTICUADO NO utilizar la version de gradle superior a la 6.6!!)


Y vemos que nos ha creado esta estructura del proyecto



Ha creado 2 clases, una src/main/java/Library.java y otra en src/text/java/LibaryTest.java

Como vemos, el JRE System library és el JavaSE-13 que debemos de cambiar por el 16. 

3. Cambiar la versión de java a java 16 (anticuado, no utilizar la version de java 16 pues tenemos problemas con el cambio de nombres de javax a jakarta)

Para ello , nos situmanos en el "Project Explorer" sobre XimoProject-lib(in lib) y con el botón derecho seleccionamos "Properties", y marcamos Java Build Path en el menú izquierdo.


Marcamos dentro de ModulePath -> JRE System Library [JavaSE-13] y le damos al botón Edit


Ahora se trata de buscar en el botón Environments el casar el tipo de java con su localización. en este caso nos interesa Java 16


Y cuadramos el tipo y el jdk (16)


Si por algún motivo no apareciera el jdk 16 habría que buscarlo en en el botón Installed JREs


Le daríamos al botón Add y localizariamos donde está instalado el jdk


Le damos a Standard VM y NEXT


Le damos al botón "Directory" y localizamos donde está nuestro jdk y luego le damos a FINISH

4. build.gradle

Este fichero está en la carpeta XimoProject-lib (lib)

y el contenido generado es:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
 * This file was generated by the Gradle 'init' task.
 *
 * This generated file contains a sample Java library project to get you started.
 * For more details take a look at the 'Building Java & JVM projects' chapter in the Gradle
 * User Manual available at https://docs.gradle.org/7.0/userguide/building_java_projects.html
 */

plugins {
    // Apply the java-library plugin for API and implementation separation.
    id 'java-library'
}

repositories {
    // Use Maven Central for resolving dependencies.
    mavenCentral()
}

dependencies {
    // Use JUnit test framework.
    testImplementation 'junit:junit:4.13.1'

    // This dependency is exported to consumers, that is to say found on their compile classpath.
    api 'org.apache.commons:commons-math3:3.6.1'

    // This dependency is used internally, and not exposed to consumers on their own compile classpath.
    implementation 'com.google.guava:guava:30.0-jre'
}


Lo que hay que saber:

Línea 11: El plugin para crear jars es "java-library"

Línea 16: Utilizaremos el repositorio de maven central

En principio nos ha creado 3 tipos de depenedencias, que se definen según el equivalente en maven de groupId, artifactId y version, pero en este caso supone que seguimos ese orden y separa los valores por ":", en este caso 'junit:junit:4.13.1' és equivalente en Maven a :

1
2
3
4
5
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.13.1</version>
</dependency>

El primer tipo de dependencia afevta al test y es testImplementation

El segundo tipo es api que nos hace accesible a todos los elementos de esta librería. Se referencia a las librerias de la forma "Maven" separando los campos por ":" como hemos visto antes

El tercero y más recomendable es implementation, que sirve para que utilicemos esta librería pero que no exportemos con nuestro jar la visibilidad de los elementos de esta librería. Se utiliza el formato "maven" separando los campos por ":"


5. Incluir una jar propio (local)

Para ello cremos una carpeta "mylibs" que cuelgue directamente de XimoProject-lib( in lib)


Metemos un jar (por ejemplo he bajado el jar de Apache "commons-lang3-3.12.0.jar") dentro de mylibs


Ahora hay que definirlo en el "build.gradle

con lo que la sección de dependencies quedaría


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
dependencies {
    // Use JUnit test framework.
    testImplementation 'junit:junit:4.13.1'

    // This dependency is exported to consumers, that is to say found on their compile classpath.
    api 'org.apache.commons:commons-math3:3.6.1'

    // This dependency is used internally, and not exposed to consumers on their own compile classpath.
    implementation 'com.google.guava:guava:30.0-jre'
    
    // This dependency is for local jars in the folder mylibs
    implementation files('mylibs/commons-lang3-3.12.0.jar')
}

la línea 12 indica que referenciamos desde un fichero en ruta relativa desde la carpeta "lib" o XimoProject-lib (in lib), y no usamos el estilo "Maven" con campos separados por ":"


6. Generar el jar

Primeramente en el Project Explorer, con el botón derecho del mouse, seleccionar Graddle --> Refresh Gradle Project

Buscar el tab de Gradle Tasks, marcar XimoProject, ir entrando en el árbol darle dos clicks al "build" indicado en figura (el que cuelga de XipoProject-lib-build)


Y en la consola sale que tod ha salido bien:

Working Directory: /home/eduard/WORKSPACES/WS_VAADIN07/XimoProject
Gradle user home: /home/eduard/.gradle
Gradle Distribution: Specific Gradle version 7.0
Gradle Version: 7.0
Java Home: /home/eduard/MyPrograms/jdk-16.0.1
JVM Arguments: None
Program Arguments: None
Build Scans Enabled: false
Offline Mode Enabled: false
Gradle Tasks: build

> Task :lib:compileJava
> Task :lib:processResources NO-SOURCE
> Task :lib:classes
> Task :lib:jar
> Task :lib:assemble
> Task :lib:compileTestJava
> Task :lib:processTestResources NO-SOURCE
> Task :lib:testClasses
> Task :lib:test
> Task :lib:check
> Task :lib:build

BUILD SUCCESSFUL in 3s
4 actionable tasks: 4 executed

Y el jar se guarda en XimoProject/lib/build/libs/lib.jar

Siendo XimoProject la carpeta del proyecto y lib la carpeta que en el Project Explorer aparece como XimoProject-lib (en lib)

OJO: Esta librería generada lib.jar, no es visible ni accesible desde eclipse al menos desde la perspectiva Java EE!

Por tanto hay que entrar en el administrador de archivos para verla!!!


7. Agregar la dependencia Lombok.jar

Para ello hay que seguir las indicaciones que se dan en Lombok

Veamos el build.gradle como quedaria


plugins {
    // Apply the java-library plugin for API and implementation separation.
    id 'java-library'
}

repositories {
    // Use Maven Central for resolving dependencies.
    mavenCentral()
}

dependencies {
    // Use JUnit test framework.
    testImplementation 'junit:junit:4.13.1'

    // This dependency is exported to consumers, that is to say found on their compile classpath.
    api 'org.apache.commons:commons-math3:3.6.1'

    // This dependency is used internally, and not exposed to consumers on their own compile classpath.
    implementation 'com.google.guava:guava:30.0-jre'
    
    // This dependency is for local jars in the folder mylibs
    implementation files('mylibs/commons-lang3-3.12.0.jar')

    /***********************************************************************
    *********************** LOMBOK DEFINITION ******************************/
    compileOnly             'org.projectlombok:lombok:1.18.20'
    annotationProcessor     'org.projectlombok:lombok:1.18.20'
    testCompileOnly         'org.projectlombok:lombok:1.18.20'
    testAnnotationProcessor 'org.projectlombok:lombok:1.18.20'
    /************************************************************************/
    
}

8. Resolución de problemas


A veces hay alguna configuracion antigua de gradle guardada en user.gradle por tanto se tendrá que borrar este fichero para que Eclipse genere uno nuevo con datos actualizados

No hay comentarios :

Publicar un comentario