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 encapsulación fuerte 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 -- ilegal-access se establece en deny en lugar de permiso. Aunque no se recomienda, esta limitación se podría omitir en Java 16 especificando -- illegal-access=permiso. -- ilegal-access también se podría establecer en warn o debug para tener el mismo efecto que permiso, pero para emitir un mensaje de aviso mientras se utiliza warn y el rastreo de pila para operaciones de acceso reflexivo ilegales al utilizar 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.