jueves, 27 de mayo de 2021

Gradle-7 (5) Crear una libreria jar no ejecutable. Definir la carpeta donde se creará y el nombre de fichero jar. V2

 Vamos a mejorar lo que vimos en un post anterior.


1. NOTA debemos utilizar la versión de gradle 6.6 pues las posteriores tienen un bug en eclipse que crean una carpeta lib adicional


2. Para ello, lo que vamos a hacer es que todos los jars se generen el la carpeta "mytargets" que cuelga directamente del WORKSPACE (al mismo nivel que los proyectos)

En el build.gradle, entre "repositories" y "dependencies" le daremos esta línea

project.jar.destinationDirectory = file("$rootDir/../mytargets")  

para hacernos una idea:


Pero debemos de tener precaución de no llamar a los jars generados (en cada propyecto) con el mismo nombre pues se pueden machacar unos con otros.

3. Ahora para las nuestras dependencias debemos apuntar a esa ruta

implementation files(

    '../mytargets/a-annotations-1.0.jar',

    '../mytargets/a-basic-utils-1.0.jar')

Lo demás queda igual

Veamos un ejemplo del gradle.build


 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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*
 * 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.2/userguide/building_java_projects.html
 */

plugins {
    // Apply the java-library plugin for API and implementation separation.
    id 'java-library'
    //id 'war'   //Sinó no funciona providedCompile    
}

repositories {
    // Use JCenter for resolving dependencies.
    jcenter()
    mavenCentral()
}

// My customization 
//project.jar.destinationDirectory = file("$rootDir/mytarget")
project.jar.destinationDirectory = file("$rootDir/../mytargets")  
project.archivesBaseName = 'c-dao' 
project.version = '1.0'

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

	/***********************************************************************
    *********************** 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'
    /************************************************************************/
    
    // This dependency is for local jars in the folder mylibs
    /*
    implementation files('mylibs/a-annotations-1.0.jar',
                         'mylibs/a-basic-utils-1.0.jar', 
                         'mylibs/b-base-control-model-1.0.jar')
    */
    implementation files('../mytargets/a-annotations-1.0.jar',
                         '../mytargets/a-basic-utils-1.0.jar', 
                         '../mytargets/b-base-control-model-1.0.jar')
                         
    //implementation files('mylibs/*.jar') //NO VA !!!
    
    /* Apache.commons  */
    implementation "org.apache.commons:commons-exec:1.3"
    
    /* Apache general */
    implementation "commons-io:commons-io:2.8.0"
    
    implementation "org.apache.commons:commons-lang3:3.12.0"
    
    /* Jakarta --> Need plugin "war" */
    //providedCompile "jakarta.annotation:jakarta.annotation-api:2.0.0"
    compileOnly "jakarta.annotation:jakarta.annotation-api:2.0.0"
   
    /* HIbernate */
    implementation "org.hibernate:hibernate-core:5.4.31.Final"
    implementation "org.hibernate:hibernate-envers:5.4.31.Final"
    //implementation "org.hibernate:hibernate-testing:5.4.31.Final"
    implementation "org.hibernate:hibernate-validator:7.0.1.Final" 
    
    /* Jackson */
	implementation "com.fasterxml.jackson.core:jackson-core:2.12.3"
    //implementation "com.fasterxml.jackson.core:jackson-annotations:2.12.3"
    //implementation "com.fasterxml.jackson.core:jackson-databind:2.12.3"
    implementation "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.12.3"
    //implementation "com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.12.3"
   
}







Gradle-7 (4) Crear una libreria jar ejecutable

 1.Introducción

Existen opciones para crear un "fat jar" runnable con todas las dependencias metidas dentro del jar. Se puede ver en estos enlaces como hacerlo:

Pero de momento voy a generar mis librerias a parte, pero tengo que hacer algunas cosas a mano

2. Crear un jar runnable con las librerias de dependencias aparte en otra carpeta

Utilizo el plugin "application", pero me genera:
  • Los "jars" en el fichero build/distributions/NOMBRE_PROYECTO.tar (y tambien .zip)
  • Dentro de ese fichero comprimido se guandan en NOMBRE_FICHERO/lib todos los jars, tanto el runnable como las dependencias
En este caso tenemos un proyecto gradle llamado D-IF07
Dentro de distributions tenemos los 2 ficheros

Y dentro de "D-INF07-1.0.tar" está esta estructura



3. Pasos a seguir


3.1 Fichero build.gradle


 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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
plugins {
    // Apply the java-library plugin to add support for Java Library
    id 'java-library'
    id 'java-library-distribution' 
} repositories { jcenter() mavenCentral() } // My customization //project.jar.destinationDirectory = file("$rootDir/../mytargets") project.archivesBaseName = 'd-if07-run' project.version = '1.0' dependencies { // Use JUnit test framework. testImplementation 'junit:junit:4.13' /*********************************************************************** *********************** 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' /************************************************************************/ implementation files('../mytargets/a-annotations-1.0.jar', '../mytargets/a-basic-utils-1.0.jar', '../mytargets/b-base-control-model-1.0.jar') implementation "org.apache.commons:commons-lang3:3.12.0" } //Always after dependencies !!!!! jar { manifest { //attributes 'Main-Class': 'com.foo.bar.MainClass' attributes( 'Main-Class': 'mipaquete.Execute', 'Class-Path': configurations.runtimeClasspath.files.collect { 'lib/'+it.getName() }.join(' ') ) } }

Lo mas importante es:
  • Línea 3-4: Se utiliza los plugins "java-library" y "java-library-distribution"
  • Líneas 13 y 14: renombraremos el jar runnable con el nombre "d-if07-run" + la versión
  • Línea 36: Se ha definido el apartado "jar" después del apartado "dependencies"
  • Línea 40: El atributo 'Main-Class' debe definir el nombre completo de la clase(que tiene el método "main") con el paquete
  • Línea 41: Le decimos al manifest donde están las dependencias. OJO le indicamos "lib", pues tendremos que incluir MANUALMENTE las librerias de dependencias (unicamente) dentro de esta librería. El jar runnable estará al mismo nivel que la libreria lib

3.2 Reajustar la ubicación de las librerias

  1. Ahora tenemos que crear unas carpeta por ejemplo "MiCarpeta"
  2. Copiar el jar runnable (en este caso "d-if07-run-1.0.jar") a MiCarpeta. Hay que recordar que este fichero se encuentra en este caso en  "build/distributions/D-IF07-01.tar/D-IF07-01/lib" donde  la parte azul es la estructura interna del fichero "tar".
  3. Crear la carpeta "lib" dentro de MiCarpeta".
  4. Copiar el resto de jars de  "build/distributions/D-IF07-01.tar/D-IF07-01/lib" a la carpeta "lib"

3.3 Como hacer la llamada?

  • Nos situamos en la carpeta MiCarpeta
  • Ejecutamos java -jar d-if07-run [parametro1] [parametro2] donde [parametroX] pueden ser los parámetros opcionales que haya
  • Comprobar que la versión de java sea la misma que la que se ha utilizado en gradle para generar el jar.
  • Tambien se puede ejecutar desde cualquier ubicación del disco, así:
  • [ruta a java/]java -jar [ruta a MiCarpeta/]d-if07-run [parametros] ..


miércoles, 19 de mayo de 2021

Ubuntu copiar proyectos java

 Veamos como hacer una copia de seguridad de un proyecto gradle (o mejor dicho de todo e directorio del WORKSPACE donde se guardan los proyecots )de varias maneras:


1. Mediante find combinado con cp

Aquí buscamos todos los ficheros que sean:
  • gradle.properties
  • *.java
  • *.gradle
y tambien incluimos todo el contenido recursivo de las carpetas cuyos nombres sean
  • src
  • mylibs
  • frontend
Para ello previamente nos sitamos en la carpeta donde estan los proyectos a copiar y ejecutamos

find . \( -type f \( -iname gradle.properties -o -iname \*.java -o -iname *.gradle \)  -o -type d \( -iname src -o -iname mylibs -o -iname frontend \) \) -exec cp -r -a --parents {}  /home/eduard/copia-seguretat/ \;


2. Mediatne un tar


OJO: 
  • La sentencia tar es en una sola línea!!!!
  • Solo nos interasan las fuentes, descartamos lo demas

cd /WORKSPACES  # Cambiamos a la carpeta donde estan todos los proyectos

tar -cJvf /home/ximo/copia-seguretat/copia.tar 
   --exclude='*/target' 
   --exclude='*/.*' 
   --exclude='*/node_modules' 
   --exclude='*/gradle' 
   --exclude='*/bin'  
   --exclude='*/mytarget' 
   --exclude '*/gradlew*' 
   --exclude '*/libs' 
   --exclude '*/Servers' 
   --exclude '*/build' 
   --exclude '*/LICENSE' 
   --exclude '*/package.json' 
   --exclude '*/tsconfig.json' 
   --exclude '*/pnpm*.*' 
   --exclude '*/types.d.ts' 
   --exclude '*/webpack*.*' 
   WS_GRDL_VAADIN.02   

Creemos un script que lo recoja todo

 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
#!/bin/bash

#--Parameters
parent_folder='/home/ximo/WORKSPACES/'
workspace_folder='WS_GRDL_VAADIN.02'
tar_folder='/home/ximo/BACKUPS/'

echo '--------------------------------------------------------------'
echo 'Project: ' $parent_folder $workspace_folder
echo '--------------------------------------------------------------'
echo Por favor, verificar que se guarda el WORKSPACE correcto. Intro continua..
read continuar

#--Calculations
project_file=${parent_folder}${workspace_folder}
my_time=`date +"%Y%m%d_%H%M"`
tar_file=${tar_folder}${workspace_folder}"_"${my_time}".tar"


echo $tar_file
echo $project_file

#--Execution
cd ${parent_folder}

tar -cJvf ${tar_file} --exclude='*/target' --exclude='*/.*' --exclude='*/node_modules' --exclude='*/gradle' --exclude='*/bin'  --exclude='*/mytarget' --exclude '*/gradlew*' --exclude '*/libs' --exclude '*/Servers' --exclude '*/build' --exclude '*/LICENSE' --exclude '*/package.json' --exclude '*/tsconfig.json' --exclude '*/pnpm*.*' --exclude '*/types.d.ts' --exclude '*/webpack*.*' ${workspace_folder}   

lunes, 17 de mayo de 2021

Gradle-7 (3) Crear una libreria jar. La dependencia Jakarta como providedCompile o compileOnly. Plugin war. Tareas build vs jar

 Con el  nuevo proceso de cambio de nombres desde "javax" a "jakarta", hay que tener cuidado.

Para las librerías que solo se usan en compilación, se puede utilizar estas 2 definiciones de dependencias en "dependencies {" del build.gradle

  • compileOnly (si se va a crear el jar solamente)
  • providedCompile (solo si se usa elplugin "war")
Por tanto si vamos a crer un jar, debemos de defiirlo como:

compileOnly "jakarta.annotation:jakarta.annotation-api:2.0.0"

Si hubiéramos puesto la segunda opcion (providedCompile "jakarta.annotation:jakarta.annotation-api:2.0.0") sin haberle metido la línea "id war" en "plugins {" del build.gradle, hubieramos tenido este error:

Could not run phased build action using connection to Gradle distribution 'https://services.gradle.org/distributions/gradle-7.0.2-bin.zip'.

cannot assign instance of java.util.Collections$EmptyList to field java.lang.StackTraceElement.moduleVersion of type java.lang.String in instance of java.lang.StackTraceElement B-DAO-lib line 0 Gradle Error Marker

En caso que hubiésemos utilizado el plugin "id war" con providedCompile, NO CREARÁ EL FICHERO JAR, a menos que le demos a la task "jar" en vez de "build" 

domingo, 16 de mayo de 2021

Ubuntu 18+ 20 + problema de pérdida del teclado. Ubuntu 22 + 23 problema de acentos en chrome, chromiums, etc

1. Problema de pérdida del teclado

Parece ser que el problema se produce cuando ser instala o reinstala ubuntu y tenemos teclado y/o ratón conectado al USB.

Puede que funcione haciendo:

1. Desconectar el teclado y/o ratón adicionales enganchados al puerto USB

2. Desde un terminal teclear sudo apt-get update para actualizar 

3. Eliminar aquel software que no es útil sudo apt autoremove 

4. Reinstalar Ubuntu desde terminal sudo apt install --reinstall ubuntu-software 

5. Prueba a enchufar el teclado y ratón al puerto USB.


Es conveniente arrancar la máquina SIN el teclado y ratón USB. En versiones anteriores (16) a veces no arrancaba.

1. Problema de omisión de acentos en chromium y sus derivados (Chrome, Brave..)

Créditos: https://bugs.chromium.org/p/chromium/issues/detail?id=367103#c114

Hay que borrar el fichero .xinputrc del directorio home (/home/ximo/..xinputrc)


martes, 11 de mayo de 2021

Ubuntu Links (vínculos de ficheros)

 1. Crear un link no permanente a un fichero (cuando rearrancamos se pierde)

ln -sfn <source_file_directory> <link_file_directory>

   la opción -f es para forzar la creación del enlace en caso que exista

   la opción -n es para no dereferenciar el fichero fuente en caso que sea un enlace 


2. Crear un link  permanente a un fichero (quitamos la opcion -s)

ln <source_file_directory> <link_file_directory>


3. Verificar el link

ls -l link_file_directory


4. Borrar el enlace

unlink -l link_file_directory

tambien se puede borrar el link rm link_file_directory


5. Obtener el path de un enlace (la ruta completa a la carpeta donde esta). supongamos que en la carpeta donde estamos hay un víncuo a un fichero o carpeta. 

readlink link_file_directory






jueves, 6 de mayo de 2021

Gradle-7 (2) Crear una libreria jar. Definir la carpeta donde se creará y el nombre de fichero jar.

1. Introducción

Hemos visto que se creaba el jar en la carpeta  lib/build/libs siendo lib la carpeta que se indica en el Project Explorer como XimoProject-lib (in lib)

Para cambiar la carpeta donde se genera hay que:

  1. Crear una carpeta (por ejemplo target) en lib (o lo que es lo mismo XimoProject-lib). Con el ratón marcamos esta carpeta y acemos "New" -> "Folder" y le damos de nombre "target

  2.  Crear esta propiedad en el build.gradle:     (ANTICUADO!! ahora se descarga en "$rootDir/../mytargets"para que todos los jars esten en el mismo sitio)                                                                                                    
     project.jar.destinationDirectory = file("$rootDir/lib/target") 
    
                                                                                                                                        

Para cambiar el el nombre del archivo y la versión se asignará estas 2 propiedades:

project.archivesBaseName = 'myjar-mame' 
project.version = '1.10'

Los valores pueden ser cualesquiera siempre que no se metan caracteres raros.

Ahora vamos a la ventana de Gradle Tasks y le damos a este build que aparece en la figura y comprobamos que se ha creado el jar en la carpeta target y con el nombre myjar-name-1.10



Comrobamos que en la consola no hay ningun error y vemos que se ha generado nuestro jar y ahora es visible desde la perspectiva Java EE






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

lunes, 3 de mayo de 2021

Crear una libreria jar con Maven que incluya recursos.

Se ha seguido a Mkyong 

La madre del cordero está en el pom.xml

  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
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>openadmin</groupId>
	<artifactId>daobaselogann</artifactId>
	<packaging>jar</packaging>
	<version>1.00</version>
	<name>DaoBaseLogAnnot</name>
	<description>DAO Base and Log</description>


	<properties>

		<maven.compiler.source>16</maven.compiler.source> <!-- 15,13,12 -->
		<maven.compiler.target>16</maven.compiler.target> <!-- 15,13, 12 -->

		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

		<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>

		<lombok.version>1.18.20</lombok.version><!-- 1.18.18, 1.18.12 -->
		<jackson.version>2.11.4</jackson.version> <!-- NO va->2.12.1, OK Antes 2.10.2, 2.10.0, 2.9.8 -->

		<commons-io.version>2.8.0</commons-io.version>
		<lang3.version>3.11</lang3.version> <!-- OK Antes 3.9 -->

		<hibernate.version>5.4.27.Final</hibernate.version>  <!-- 5.4.21.Final, 5.4.16.Final, 5.2.16, 5.4.5 -->
		<hibernate-validator.version>6.2.0.Final</hibernate-validator.version><!-- 
			6.1.5.Final -->

		<h2.version>1.4.200</h2.version><!-- 1.4.199 -->
		<postgresql.version>42.2.18</postgresql.version> <!-- (1.1)42.2.14 -->
		<jtds.version>1.3.1</jtds.version>


	</properties>

	<dependencies>

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>${lombok.version}</version>
			<scope>provided</scope>
		</dependency>




		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>${hibernate.version}</version>
		</dependency>

		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-envers</artifactId>
			<version>${hibernate.version}</version>
		</dependency>

		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-testing</artifactId>
			<version>${hibernate.version}</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-validator</artifactId>
			<version>${hibernate-validator.version}</version>
		</dependency>

		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>${jackson.version}</version>
		</dependency>

		<dependency>
			<groupId>com.fasterxml.jackson.dataformat</groupId>
			<artifactId>jackson-dataformat-yaml</artifactId>
			<version>${jackson.version}</version>
		</dependency>

		<dependency>
			<groupId>com.fasterxml.jackson.dataformat</groupId>
			<artifactId>jackson-dataformat-xml</artifactId>
			<version>${jackson.version}</version>
		</dependency>

		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>${commons-io.version}</version>
		</dependency>

		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>${lang3.version}</version>
		</dependency>

	</dependencies>

	<!-- BEGIN ADD -->
	<build>
		<finalName>daoedu</finalName>
		<plugins>

			<!-- download source code in Eclipse, best practice -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-eclipse-plugin</artifactId>
				<version>2.10</version>
				<configuration>
					<downloadSources>true</downloadSources>
					<downloadJavadocs>false</downloadJavadocs>
				</configuration>
			</plugin>

			<!-- Set a compiler level -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.8.1</version>
				<configuration>
					<source>${maven.compiler.source}</source>
					<target>${maven.compiler.target}</target>
				</configuration>
			</plugin>

			<!-- Maven Shade Plugin -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-shade-plugin</artifactId>
				<version>3.2.4</version>
				<executions>
					<!-- Run shade goal on package phase -->
					<execution>
						<phase>package</phase>
						<goals>
							<goal>shade</goal>
						</goals>
						<!-- <configuration> <transformers> -->
						<!-- add Main-Class to manifest file -->
						<!-- <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
							<mainClass>com.mkyong.core.utils.App</mainClass> </transformer> </transformers> 
							</configuration> -->
					</execution>
				</executions>
			</plugin>

		</plugins>
	</build>

</project>
  


La parte build (que está en negrilla) permite crear el jar.
No indicamos ninguna clase para el "main"
Ejecutamos RunAs-Maven Build... y le damos a goals: package
Y nos genera en la carpeta "target" los ficheros daoedu.jar (que se lo hemos indicado en la línea 111), y también el fichero (que de momento no gastaremso original-daoedu.jar






Ubuntu establecer la variable PATH definitivamente

 Según HackProgramming se puede hacer modificando el fichero ~/.profile

Se le puede añadir esto al fichero (se le añade al path la carpeta MyShells al PATH)


# set PATH so it includes user's private MyShells if it exists

if [ -d "$HOME/MyShells" ] ; then

    PATH="$HOME/MyShells:$PATH"

fi


y ahora le damos este comando para que recoja el nuevo PATH

source ~/.profile

Y ya podemos ver esta carpeta en el path haciendo

echo $PATH