Recomendación SDKMAN

SDKMAN es una herramienta genial que nos permite gestionar diferentes instalaciones de herramientas relacionadas con el mundo Java (JDK, Maven, Gradle, SpringBoot, …) desde la línea de comandos. Lo que es muy práctico es que permite que convivan, de forma muy fácil, diferentes versiones de estas herramientas.

$ sdk current

Using:

gradle: 3.4.1
grails: 3.2.7
groovy: 2.4.10
kotlin: 1.1.1
maven: 3.3.9
sbt: 0.13.13
scala: 2.12.1
springboot: 1.5.2.RELEASE

Si no lo estáis usando ya, os recomiendo que le echéis un ojo.

Saludos

No funciona el login JHipster Oauth 2

Al crear una aplicación con JHipster, habilitando la autenticación con Oauth2, me he encontrado que no era capaz de entrar en la app generada con los usuarios por defecto (admin y user).

El “problema”, si no he entendido mal, es que jhipster está generando incorrectamente un fichero .csv, que posteriormente cargará en la BBDD.

src/main/resources/config/liquibase/oauth_client_details.csv

Este fichero tenía la siguiente pinta:

client_id;resource_ids;client_secret;scope;authorized_grant_types;web_server_redirect_uri;authorities;access_token_validity;refresh_token_validity;additional_information;autoapprove
<%= baseName %>app;res_<%= baseName %>;my-secret-token-to-change-in-production;read,write;password,refresh_token,authorization_code,implicit;;ROLE_ADMIN,ROLE_USER;1800;2000;{};true

Se trata de sustituir el tag: <%= baseName %> por el nombre de tu aplicación. Suponiendo que tu app se llame “example”, quedaría así:

client_id;resource_ids;client_secret;scope;authorized_grant_types;web_server_redirect_uri;authorities;access_token_validity;refresh_token_validity;additional_information;autoapprove
exampleapp;res_example;my-secret-token-to-change-in-production;read,write;password,refresh_token,authorization_code,implicit;;ROLE_ADMIN,ROLE_USER;1800;2000;{};true

Una vez hecho esto, rearrancamos la app y al volver a cargar los datos de la BD ya tiene las referencias correctas y ya es posible hacer login.

Realmente no tengo muy claro si esto es un bug de JHipster o símplemente es que no he seguido todos los pasos necesarios para configurar la instalación.

Bonus: Para visualizar el contenido de la BD h2 en memoria, es posible utilizar el cliente web al que podemos acceder en la siguiente dirección: http://localhost:8080/h2-console.

Saludos y espero que le sirva a alguien

Gradle, Sonar e Informes de cobertura (Jacoco)

Para un proyecto java simple.

El análisis estático de SonarQube se lanza desde Jenkins.

sonar-project.properties:

sonar.projectKey=com.sourcerebels:some_project
sonar.projectName=SomeProject
sonar.projectVersion=1.0
sonar.language=java
sonar.sources=src/main/java
sonar.tests=src/test/java
sonar.java.binaries=build/classes/main
sonar.jacoco.reportPaths=build/jacoco/test.exec

build.gradle

apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'jacoco'

mainClassName = "SomeProject"
sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    jcenter()
    mavenCentral()
}

dependencies {
    testCompile 'junit:junit:4.12'
    testCompile 'org.mockito:mockito-core:2.7.16'
}

JitPack.io mola mucho

Hace ya un tiempo que vengo siguiendo este servicio (he visto que mucha gente lo va utilizando). No voy explicar nada del otro mundo, simplemente quiero recomendar su uso.

JitPack.io es un servicio que permite publicar un tag concreto de un repositorio de Github en su repositorio de Maven.

El esfuerzo necesario para publicar i/o utilizar una librería de Android es tan poco que parece mentira.

Este repositorio es compatible con los sistemas de construcción: Maven (Java), Gradle (Java, Android, Groovy), SBT (Scala) o Leiningen (Clojure).

Mola mucho. Buen trabajo 🙂

Mostrar el resultado de los test unitarios al ejecutar Gradle

Una de las cosas que me confunde cuando ejecuto el Gradle desde la línea de comandos es que si los tests se ejecutan sin fallos, no muestra ningún tipo de detalle acerca de que tests fueron ejecutados. Con lo que no acabo de tener la certeza de que todo haya ido bien.

Al añadir estas líneas en el fichero build.gradle de nuestro módulo mostrará la información de qué test ha ejecutado y cual ha sido el resultado, además de la salida standard y error si la hubiese.

android {
  ...
  testOptions.unitTests.all {
    ignoreFailures false
    testLogging {
      events "passed", "skipped", "failed", "standardOut", "standardError"
    }
  }
}

Por supuesto, yo no he inventado nada. Lo saqué de esta respuesta en Stackoverflow.

Tema relacionado: Test from the Command Line

Instalar Ubuntu Linux en Dell XPS 8900 (Problema pantalla negra)

El problema venía siendo que la instalación se quedaba en negro nada más comenzar. Encontré este post dónde explica la solución.

  • Iniciar desde el disco de instalación USB.
  • Nada más arrancar, pulsar shift para que aparezca el menú de GRUB.
  • Editar la línea de grup (pulsando la tecla e si estás en modo texto o F6 en modo gráfico).
  • Justo a continuación de quiet splash y antes de las tres rallitas del final ---, introducir el siguiente texto: quiet splash pcie_aspm=off ---

Con esto, al menos de forma temporal, ya no se queda en negro y es posible instalarlo.

El problema es que una vez instalado ya no he visto la forma de volver a hacer aparecer el menú de GRUB y vuelve a salir en negro.

Persistir los cambios

Para conseguir que el cambio sea persistente, volveremos a iniciar desde el Live-CD y ejecutaremos los siguientes pasos:

Montar el disco duro donde instalaste Ubuntu en la ruta /mnt

En mi caso es /dev/sdb1 pero deberías poner la ruta que se correspondiese con tu disco duro. Si no tienes clara cual es, mejor no sigas adelante. Aquí puedes encontrar algo más de información.

sudo mount /deb/sdb1 /mnt

Montar las rutas necesarias para que Grub pueda funcionar

sudo mount --bind /dev /mnt/dev
sudo mount --bind /dev/pts /mnt/dev/pts
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys

Ejecutar chroot

sudo chroot /mnt

Editar el fichero /etc/default/grub y volver a añadir la opción pcie_aspm=off

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash pcie_aspm=off"

Ejecutar la orden update-grub

update-grub

Salir de chroot:

exit

Desmontar las rutas

sudo umount /mnt/dev/pts
sudo umount /mnt/dev
sudo umount /mnt/proc
sudo umount /mnt/sys
sudo umount /mnt

Con esto (casi nada) ya quedaron los cambios persistentes.