Począwszy od środowiska Java 8 pakiet JDK jest dostarczany z programem narzędziowym wiersza komend o nazwie jdeps (Analizator zależności klas Java).
Komenda
jdeps umożliwia przeprowadzenie analizy zależności klas i udostępnia dodatkowe parametry na potrzeby oznaczania wewnętrznych pakietów zawartych w pakiecie JDK.
Narzędzie
WebSphere Migration Tool umożliwia oznaczenie większości problemów związanych z migracją znalezionych w aplikacji, natomiast narzędzie jdeps udostępnia dodatkowe metody
wykrywania wewnętrznych pakietów zawartych w pakiecie JDK, które nie będą już dostępne po przeprowadzeniu migracji do nowej wersji środowiska Java.
Zaleca się uruchomienie komendy jdeps jako ostatniego kroku po rozwiązaniu problemów oznaczonych przez binarne lub źródłowe narzędzia WebSphere Migration Tool. Należy
uruchomić komendę jdeps względem artefaktów Java aplikacji.
Aby uzyskać jak najlepsze wyniki, należy użyć komendy jdeps dostępnej w planowanej
docelowej instalacji pakietu JDK, na przykład w instalacji pakietu JDK 11, z parametrem -jdkinternals. Na przykład po ustawieniu środowiska tak, aby używane było
środowisko Java 11, należy uruchomić następującą komendę:
| jdeps -jdkinternals C:\demo\Apps\myapplication.jar |
Począwszy od wersji 9 środowiska Java zaczęto ograniczać dostęp do większości wewnętrznych struktur pakietu JDK. Jednak w celu ułatwienia migracji ta silna hermetyzacja była domyślnie wyłączona w przypadku interfejsów API, które istniały w środowisku Java 8. Począwszy od środowiska Java 16 opcja programu uruchamiającego --illegal-access jest domyślnie ustawiona na deny, a nie na permit. Mimo że nie jest to zalecane, ograniczenie to można wyłączyć w środowisku Java 16 poprzez określenie opcji
--illegal-access=permit. --illegal-access można także ustawić na warn
lub debug, co będzie miało ten sam efekt, jak permit, ale dodatkowo spowoduje wygenerowanie komunikatu ostrzegawczego w przypadku wartości warn albo stosu wywołań niedozwolonych operacji z dostępem refleksyjnym w przypadku wartości debug.
W przypadku migracji do środowiska Java 17 lub nowszego opcja programu uruchamiającego --illegal-access ma status przestarzałej. Większość struktur wewnętrznych pakietu JDK jest teraz silnie hermetyzowana. Mimo że nie jest to zalecane, ograniczenie to można obejść użyciu opcji programu uruchamiającego --add-opens lub atrybutu manifestu JAR Add-Opens
w celu otwarcia konkretnych pakietów wymaganych przez aplikację lub biblioteki innych firm.
Do newralgicznych wewnętrznych interfejsów API, które nie są hermetyzowane przez tę zmianę, należą:
Program narzędziowy wygeneruje dane wyjściowe identyfikujące odwołania do klas wewnętrznych pakietu JDK i udostępni sugerowane zastępcze interfejsy API (tam, gdzie jest to
możliwe).
Uwaga: komenda jdeps akceptuje tylko pliki o rozszerzeniu .class, katalog lub plik JAR.
Więcej informacji na temat komendy jdeps zawiera
strona z informacjami dodatkowymi dotyczącymi komendy jdeps.