es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Actualizar dependencias transitorias remotas en Gradle

Ok Log4j tiene una vulnerabilidad entre 2.0 y 2.15. Me han encargado actualizar las versiones a 2.15 en algunas aplicaciones java que tenemos. Al investigar, esto es bastante fácil con Gradle:

compile ‘org.apache.logging.log4j:log4j-api:2.15.0’
compile ‘org.apache.logging.log4j:log4j-core:2.15.0’

resolve el problema. Pero, ¿todo puede ser tan simple, verdad? ¡POR SUPUESTO! Tenemos una aplicación que hace referencia a un artefacto interno donde el código fuente del artefacto interno NO EXISTE. Sería fácil hacer lo anterior en el artefacto interno y publicar una nueva versión, pero nooooo. El artefacto interno requiere Spring Boot, por lo que actualizar la aplicación principal de esta manera no resuelve el problema.

compile ‘org.apache.logging.log4j:log4j-api:2.15.0’
compile ‘org.apache.logging.log4j:log4j-core:2.15.0’
compile ‘com.xxxx:xxxxx:0.0.1′{ <–
exclude group: ‘org.apache.logging.log4j’
}

Aunque el artefacto interno no incluye log4j con esta configuración, Spring Boot no puede encontrar la referencia a log4j porque Spring Boot está encapsulado dentro del artefacto interno.

He estado trabajando en esto durante algún tiempo. He intentado implementation constraints. He intentado descargar el artefacto, descomprimirlo e intentar descompilar los objetos de clase en Java, pero el descompilador estaba aplicando alguna optimización y no pude determinar la versión de Java objetivo basada en las clases descompiladas. Lo cual es alarmante y requeriría mucha prueba antes de ir a producción.

¿Cómo demonios puedo hacer que la versión de log4j mencionada esté disponible para este misterioso artefacto o cómo puedo forzar al artefacto a usar una versión diferente?

P.D. Ejecuté gradle dependencies y es 2.x -> 2.15. Confirmé que todo funciona bien con esta actualización.

P.P.D. El artefacto se construye con Maven. No sé si eso importa y no creo que sí.

P.P.P.D. He editado esto varias veces para mejorar la claridad, si no es la primera vez que estás aquí, por favor vuelve a leer.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Pregunta: ¿Cómo puedo actualizar la versión de Log4j a 2.15 en una aplicación Java, incluyendo un artefacto interno que requiere Spring Boot?

    Para actualizar la versión de Log4j a 2.15 en una aplicación Java, puedes agregar las siguientes dependencias en el archivo de compilación de Gradle:

    compile 'org.apache.logging.log4j:log4j-api:2.15.0'
    compile 'org.apache.logging.log4j:log4j-core:2.15.0'
    

    Sin embargo, si la aplicación incluye un artefacto interno que requiere Spring Boot, esto puede no ser suficiente. Puedes intentar excluir Log4j en la dependencia del artefacto interno agregando lo siguiente al archivo de compilación de Gradle:

    compile('com.xxxx:xxxxx:0.0.1') {
        exclude group: 'org.apache.logging.log4j'
    }
    

    Pero esto puede no funcionar si Spring Boot no puede encontrar la referencia a Log4j, ya que está encapsulado dentro del artefacto interno.

    Una solución puede ser hacer que la versión de Log4j esté disponible para el artefacto interno. Otra solución puede ser forzar al artefacto interno a utilizar una versión diferente de Log4j que sea compatible con Spring Boot.

    Para hacer que la versión de Log4j esté disponible para el artefacto interno, puedes intentar publicar una nueva versión del artefacto interno que incluya las dependencias actualizadas de Log4j. Para forzar al artefacto interno a utilizar una versión diferente de Log4j, puedes intentar usar las Restricciones de Dependencia de Gradle, que te permiten definir reglas para resolver las dependencias.

    También es importante probar cualquier cambio a fondo antes de implementarlo en producción. Además, ten en cuenta que el artefacto interno se construye con Maven (mientras que la aplicación principal se construye con Gradle), pero esto no debería afectar la solución.

Comments are closed.