jueves, 21 de julio de 2022
jueves, 7 de julio de 2022
Gradle-7 (11) Gradle Multiproyecto (4). ERRORES que te machacan!!
0. Antes de importar cualquier proyecto hijo al proyecto padre, hay que hacer una copia de seguridad!!, pues revertir los cambios es muy difícil, por culpa de la caché y otros cambios inesperados que hace Eclipse.
1. No se compilan los proyectos simples por un error de compilación de un proyecto que depende de estos.
Si borramos todos los jars del directorio al que volcamos los jars (para aseguranos que se vuelvan a generar correctamente), y existe un proyecto "grande" que utiliza otros proyectos, entonces no genera los jars iniciales si hay un error de compilación del proyecto "grande", por tanto, hasta que no se depuren los errores, no se volverá a generar los "jars".
Cuidado cuando importemos un proyecto
2. DESAPARECE el proyecto padre de la "Gradle Tasks" y aparecen los hijos con error.
Suele suceder en alguno de estos casos:
a. Copiamos más de un proyecto hijo a la vez a la carpeta del padre. Es preferible solo copiar una carpeta, arreglar su "build.gradle" (del hijo), y añadir el proyecto a "settings.gradle" del padre ese proyecto.
b. Cuando en el "build.gradle" del hijo no hemos dado bien el nombre de algún proyecto del que depende en el apartado de "dependencies", en este ejemplo, el proyecto que hace referencia no existe, pues el correcto es "A004-PDF" y no "A004-PDFS"
dependencies { // Use JUnit Jupiter for testing. testImplementation libs.junit.jupiter api(project(path: ':A001-WS_Shdw', configuration: 'shadow')) api(project(":A004-PDFS")) }
c. Cambiar los guiones "-" por puntos "." a la hora de referenciar las librerias que se han definido en el fichero "settings.gradle" del proyecto padre. En el fichero "settings.gradle" del proyecto padre, podemos definir las dependencias que utilizamos, y así tener un mayor control de las versiones que se utilizan aquí mostramos un ejemplo real de dicho fichero
rootProject.name = 'AllProjects' include('A000-Basic', 'A002-Jackson','A003-Excel', 'A004-PDF', 'A006-CMIS' ) dependencyResolutionManagement { versionCatalogs { libs { //library('commons-lang3', 'org.apache.commons', 'commons-lang3').version { // strictly '[3.8, 4.0[' // prefer '3.9' //} library('junit-jupiter', 'org.junit.jupiter:junit-jupiter:5.7.2') library('lombok', 'org.projectlombok:lombok:1.18.20') library('commons-beanutils', 'commons-beanutils:commons-beanutils:1.9.4') library('commons-io', 'commons-io:commons-io:2.11.0') library('commons-lang3', 'org.apache.commons:commons-lang3:3.12.0') library('commons-codec', 'commons-codec:commons-codec:1.15') } } }
Por ejemplo para la librería con alias "commons-io" , para indicarla en el fichero "build.gradle" del proyecto que la utiliza debemos indicar la referencia "commons.io" (cambiando el guión "-" por el punto ".") en la sección de "dependencies"
dependencies { // Use JUnit Jupiter for testing. testImplementation libs.junit.jupiter api libs.commons-io //mal hay un guión en la referencia
api libs.commons.io //bien, se hs sustituido el guión por un punto
}d. Cuando se borra un comentario al inicio de la dependencia, hay que comprobar que no haya caracteres residuales. Por ejemplo al borrar el símbolo de comentario "//" y no borramos "--> otros caracteres" entonces nos desaparece el proyecto de la "Gradle Tasks"
dependencies { // Use JUnit Jupiter for testing. testImplementation libs.junit.jupiter //api(project(":A000-Basic")) --> otros caracteres
api(project(":A000-Basic")) --> otros caracteres
api(project(":A004-PDF"))
}
3. Test que dan "Entry properties/alba.properties is a duplicate but no duplicate handling strategy has been set"
Parece ser que es un error de gradle, veamos una clase en src/test/java que lo genera. Una referencia a unas propiedades que se encuentran en src/main/resources/properties, provoca el error
@Test void isnullClassLoaderReturnFalse() throws Exception { Properties props = PropertyUtilsEdu.getProperties(ExecutionTypeEnum.NO_JAR, "alba"); assertTrue(props!=null, "1. Properties are null"); }
Para solucionar esto, se ha añadido la línea
duplicatestrategy = DuplicateStrategy.EXCLUDE dentro de la tarea JAR
jar { duplicatesStrategy = DuplicatesStrategy.EXCLUDE manifest { //attributes 'Main-Class': 'com.foo.bar.MainClass' attributes( 'Main-Class': 'Execute', 'Class-Path': configurations.runtimeClasspath.files.collect { 'lib/'+it.getName() }.join(' ') ) } from { sourceSets.main.allSource //Include java sources } }
4. Resultados distintos al ejecutar test en un "terminal" que con la ventana "Gradle Tasks" de Eclipse.
Parece ser que la opción "build" de la carpeta "build" de la ventana "Gradle Tasks", a parte de hacer un build, realiza los tests.
Para ejecutar los tests des de un terminal, ejecutamos "./gradlew clean test". Si en eclipse, los test van bien, pero no en el terminal, hay que comprobar la versión de java que toma el terminal con "java -version".
En mi caso, en Eclipse tenia java 17 y en el terminal la versión 13. Para solucionarlo, hay que consultar este link de askubuntu , y he hecho
sudo nano /etc/enviroment
y el fichero ha quedado así:
JAVA_HOME=/home/ximo/MyPrograms/jdk-17.0.2+8.OpenJ9/bin PATH=/home/ximo/MyPrograms/jdk-17.0.2+8.OpenJ9/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Y parece ser que los resultados son los mismos.
jueves, 23 de junio de 2022
Encriptar contraseñas guardadas en bash script
0. Introducción
Me baso en lo que dice Linux-tech. Se va a emplear openssl, por tanto hay que verificar que openssl esté instalado.
1. Preparativos
1. Buscamos una clave que servirá para encriptar las otras contraseñas, por ejemplo "miClave"
2. Supongamos que tenemos 3 contraseñas que queremos ocultar (contraseña1, contraseña2 y contraseña3)
3. Ejecutamos estos comandos para obtener las contraseñas encriptadas:
echo "contraseña1" | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass:miClave > 1.txt echo "contraseña2" | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass:miClave > 2.txt echo "contraseña1" | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass:miClave > 3.txt
Se ha descargado el resultado a 3 ficheros (1.txt, 2.txt, 3.txt) pero no es necesario.
4. Recogemos las contraseñas encriptadas que son respectivamente:
U2FsdGVkX189KukyhKMO1tGXqFihjhflWxnNxdPZNQQ=
U2FsdGVkX1/D10iKLBm92DHcG7Diqyiqm0FkL9zHHSs=
U2FsdGVkX191qIFKp3qfRdzzImuyjiH13kmNel6HiSA=
2. Nuestro shell script (bsh) simplificado
Observar las sentencias comentadas que nos sirven de depuración
#!/bin/bash #0. pwds echo 'Indicar clave' read -s myKey #echo "$myKey" encriptado1='U2FsdGVkX189KukyhKMO1tGXqFihjhflWxnNxdPZNQQ=' #echo "$encriptado1" contrasena1=`echo "$encriptado1" | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass:"$myKey"` #echo "$contrasena1" encriptado2='U2FsdGVkX1/D10iKLBm92DHcG7Diqyiqm0FkL9zHHSs=' #echo "$encriptado2" contrasena2=`echo "$encriptado2" | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass:"$myKey"` #echo "$contrasena2" encriptado3='U2FsdGVkX191qIFKp3qfRdzzImuyjiH13kmNel6HiSA=' #echo "$encriptado3" contrasena3=`echo "$encriptado3" | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass:"$myKey"` #echo "$contrasena3"
Con esto hemos recuperado las contraseñas y además se ha protegido el código fuente del programa con respecto a sus cotraseñas guardadas internamente.
martes, 7 de junio de 2022
Clave 2.0 Java (2) Configurar el proyecto de prueba
Ahora que ya hemos podido arrancar la primera pantalla, hay que configurar la aplicación.
1. Configurar Tomcat con SSL
y nos muestra que hay 2 entradas ("local-demo-cert-es" y "sello kit de pruebas (ac sector público)")
Keystore type: jks
Keystore provider: SUN
Your keystore contains 2 entries
local-demo-cert-es, 16/11/2017, PrivateKeyEntry,
Certificate fingerprint (SHA-256): B6:DD:C5:7D:A5:06:17:7A:E3:3B:9B:E9:2C:45:38:14:B7:98:3D:09:B8:A9:2E:34:3D:F5:BB:E3:3A:F3:53:44
sello kit de pruebas (ac sector público), 17/05/2022, PrivateKeyEntry,
Certificate fingerprint (SHA-256): F3:ED:ED:01:F6:E5:C6:7B:AD:7F:26:76:3A:8E:D9:6F:1A:A1:FC:B1:CB:EB:87:86:D1:D8:36:C0:EA:BD:A3:1C
Warning:
<local-demo-cert-es> uses the SHA1withRSA signature algorithm which is considered a security risk. This algorithm will be disabled in a future update.
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore CLAVE20_CONF/SP/KeyStore.jks -destkeystore CLAVE20_CONF/SP/KeyStore.jks -deststoretype pkcs12".
Vamos a utilizar el certificado con alias "local-demo-cert-es" como certificado del servidor.
Vamos a Servers -Tomcat v8.5 Server at localhost-config y modificamos el fichero server.xml
Añadimos las líneas que no estan comentadas sirviendo de ejemplo de las primeras que están comentadas.
<!-- <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true"> <SSLHostConfig> <Certificate certificateKeystoreFile="conf/localhost-rsa.jks" type="RSA" /> </SSLHostConfig> </Connector> --> <Connector
SSLEnabled="true"
maxThreads="150"
port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
scheme="https"
secure="true"> <SSLHostConfig> <Certificate
certificateKeyAlias="local-demo-cert-es"
certificateKeystoreFile="ruta.../Config/KeyStore.jks"
certificateKeystorePassword="local-demo"
type="RSA"/> </SSLHostConfig> </Connector>
Hay que darle la ruta correcta al keystore en "certificateKeystoreFile"!!!
Ejecutamos (Run As- Run On Server) y arranca con protocolo http. Para ver si va con https abrimos una pestaña del navegador y le indicamos https://localhost:8443/SP2 y debería de arrancar, dando los problemas de siempre que no se confía en ese certificado, pero al final arranca
viernes, 3 de junio de 2022
Windows Server 2019. Ver archivos abiertos
1. Entrar en administrador del servidor
2. En la parte superior derecha seleccionar Herramientas
3. Seleccionar Administrador de Equipos
4. Seleccionar Carpetas compartidas y luego archivos abiertos
5. Si queremos cerrar el archivo abierto pues no nos deja copiar la nueva versio ya lo podemos hacer
miércoles, 1 de junio de 2022
Clave 2.0 Java (1) Instalar el proyecto de prueba
1. Preinstalación
1. Descargar el proyecto de prueba
Vamos a la PAE y descargamos el "Paquete de integracion Java 8" del 19/5/2022
2. Creamos un Workspace (WS_CLAVE) y dentro de él, una carpeta (Por ejemplo SP2 que es el "artifactId" que se indica en el pom.xml) dentro de un Workspace Java
3. Abrimos el fichero zip descargado y copiamios el contenido de "Paquete_Integracion_Java_Clave_2_0" dentro de esa carpeta
4. Ahora desde Eclipse importamos (File - Import -Maven - Existing Maven Projects) Y le indicamos la carpeta SP2
5. Una vez importado , hay que seleccionar el Java 1.8 en Eclipse
6.a. Establecemos la variable de entorno CLAVE_SP2_CONFIG_REPOSITORY que apunte donde se encuentra la carpeta Config. En este caso es: /home/ximo/MyWorkspaces/WS_CLAVE/SP2/Config/. Para ello editamos el fichero ~/.profile y le añadimos esta línea
export CLAVE_SP2_CONFIG_REPOSITORY="$HOME/MyWorkspaces/WS_CLAVE/SP2/Config/"
Para asegurar que ha cogido las variables de entorno, en una ventana de shell escribimos
source ~/.profile
NOTA: Para no tener problemas con la localización de la carpeta "Config", se podría copiar dicha carpeta a un ruta que no dependiera del proyecto como /home/ximo/CLAVE20_CONF, de esta manera si quisiéramos tener una segunda versión del proyecto, no tendríamos que tocar nada.
6.b. Alternativamente a la opción a), podemos modificar el fichero src/main/resources/spEnvironmentContext y cambiar
<constructor-arg value="#{ systemProperties['CLAVE_SP2_CONFIG_REPOSITORY'] ?: systemEnvironment['CLAVE_SP2_CONFIG_REPOSITORY'] }" />
por
<constructor-arg value="/home/ximo/MyWorkspaces/WS_CLAVE/SP2/Config/" />
7. A veces puede dar problemas que no encuentra algunas dependencias que se enuentran en la carpeta local "Dependencias"; si es el caso hay que modificar el pom.xml, casi al final del archivo, en la zona de <repositories> pues es incapaz de encontrar las dependencias, para ello cambiamos
<url>file://Dependencias</url> por
<url>file://${project.basedir}/Dependencias </url>
7. Ahora clicamos con el boton derecho sobre el proyecto Maven - Update Project y deberian de desaparecer los problemas de compilación
8. Abrir la ventana de Servers (si no esta hay que añadirla en Window -Show View -Other - Servers ) y añadir un servidor Tomcat 8.5 y en
9. Clicamos con el boton derecho sobre el proyecto Run As - Run on Server, seleccionar el Tomcat 8.5 que hemos instalado y al menos arranca:
10. Comprobamos que tengamos esta estructura de ficherosY desde el sistema operativo
Ahora viene la parte difícil de entender lo que hace.
2. Posibles problemas (si no ha arrancado)
1. Si sale este error:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'placeholderConfig' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'securityConfigFileWithPath' while setting bean property 'locations' with key [0]; nested exception is org.springframework.beans.factory.BeanExpressionException: Expression parsing failed; nested exception is org.springframework.expression.spel.SpelEvaluationException: EL1021E: A problem occurred whilst attempting to access the property 'spConfigRepository': 'Error creating bean with name 'spConfigRepository' defined in class path resource [spEnvironmentContext.xml]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.lang.String]: Constructor threw exception; nested exception is java.lang.NullPointerException: Cannot invoke "java.lang.StringBuffer.toString()" because "buffer" is null'
Hay que vigilar en la "Console" a ver si aparece un a referencia a un JDK que no sea el 1.8
INFORMACIÓN: Java Home: /home/edu/MyPrograms/eclipse2022-03/plugins/org.eclipse.justj.openjdk.hotspot.jre.full.linux.x86_64_17.0.2.v20220201-1208/jre
Como se puede ver hace referencia a java 17. Por tanto hay que arreglar el Java Build path para que apunte donde toca (jdk o jre 8).
2. Si sale este error:
org.springframework.beans.factory.BeanInitializationException: Could not load properties; nested exception is java.io.FileNotFoundException: /home/edu/MyWorkspaces/WS_CLAVE/SP2/ConfigsecurityConf.xml (No existe el archivo o el directorio)
/home/ximo/MyWorkspaces/WS_CLAVE/SP2/Config/A veces parece que está bien escrito la ruta anterior y no lo está. Vale la pena entrar en un navegador de archivos y copiar la ruta y pegarla. Estos errores dan mucha guerra y son difíciles de encontrarlunes, 30 de mayo de 2022
MS SQL Server Express 2019. Instalación
Procedimiento
1. Descargar el programa MS SQL Server Express 2019 desde la web de Microsoft
2. Instalar la opción básica.
3. Descargar el MS QL management console (MSMC)
4. Ejecutar MSMC
5. Desativar en primera instancia el perfil de dominio y el prefil privado
6. entrar en MS












