A menudo se llama a Java con rutas absolutas como /usr/bin/java
, lo que hace que esta respuesta sea inútil en algunos casos y requiere más para que funcione en otros.
Esa solución que encontré requiere escribir un script de shell de envoltura que redirija a STDERR a través de un filtro que elimine la línea ofensiva. Tiene que ser colocado en el $PATH
antes de que el java binario que envuelve y se llama con llana java
, which java
o similar (o su herramienta tiene que ser configurado para usarlo)
Se basa en la capacidad de bash para crear una subshell con paréntesis (command)
y redirigir el STDERR de Java a su STDIN command1 2> >(command2)
. Finalmente, el proceso en el subshell necesita redirigir su entrada filtrada a STDOUT nuevamente para que los programas java puedan seguir utilizando STDERR.
#!/bin/bash
/usr/bin/java "$@" 2> >(grep -v "^Picked up _JAVA_OPTIONS:" >&2)
docker build
- pero a llamarse${JAVA_HOME}/bin/java
ajava2
y poner una versión modificada de este script en allíjava
(conchmod +x
). ¡Trabajado como un encanto!