Ejecutar la herramienta de analizador de dependencias de clase Java (JDeps)

A partir de Java 8, el JDK incluye un programa de utilidad de línea de mandatos denominado jdeps (analizador de dependencias de clase Java). El mandato jdeps analiza las dependencias de clase y proporciona parámetros adicionales para marcar los paquetes JDK internos. Mientras que la herramienta de migración de WebSphere marca la mayoría de los problemas de migración que hay en una aplicación, la herramienta jdeps puede proporcionar una detección adicional de los paquetes JDK internos que ya no están disponibles después de migrar a nueva versión de Java.

Le recomendamos que ejecute el mandato jdeps como un paso final después de resolver los problemas marcados por las herramientas de migración de WebSphere binarias o origen. Ejecute el mandato jdeps para los artefactos Java de la aplicación. Para garantizar unos resultados precisos, utilice el mandato jdeps disponible en la instalación de JDK de destino planificada, como por ejemplo JDK 11, con el parámetro -jdkinternals. Por ejemplo, después de establecer el entorno para utilizar Java 11, ejecute el mandato siguiente:

jdeps -jdkinternals C:\demo\Apps\myapplication.jar

A partir de Java 9, se inició un esfuerzo para limitar el acceso a la mayoría de los valores internos de JDK. Sin embargo, para ayudar con la migración, esta fuerte encapsulación se desactivó de forma predeterminada para las API que existían en Java 8. A partir de Java 16, el valor predeterminado de la opción de lanzador --illegal-access se establece en deny en lugar de permit. Aunque no se recomienda, esta limitación podría omitirse en Java 16 especificando --illegal-access=permit. --illegal-access también se puede establecer en warn o debug para que tenga el mismo efecto que permit, pero para que emita un mensaje de aviso al utilizar warn y el rastreo de pila para operaciones de acceso reflectivo ilegal mientras se utiliza debug.

Al migrar a Java 17 o posterior, la opción de lanzador --illegal-access es obsoleta. La mayoría de los valores internos de JDK ahora se han encapsulado fuertemente. Aunque no se recomienda, esta limitación se puede eludir utilizando la opción de lanzador --add-opens o el atributo de manifiesto JAR Add-Opens para abrir paquetes específicos que son necesarios para la aplicación o las bibliotecas de terceros.

Determinadas API internas críticas no encapsuladas por este cambio incluyen:

El programa de utilidad genera una salida que identifica las referencias a las clases internas de JDK y proporciona las API de sustitución sugeridas siempre que sea posible. Nota: el mandato jdeps sólo acepta archivos .class, un directorio o un archivo JAR.

Para obtener más información sobre el mandato jdeps, consulte la página de referencia de jdeps.