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ę:
Począwszy od wersji 9 środowiska Java zaczęto ograniczać dostęp do większości wewnętrznych struktur pakietu JDK. Jednak aby pomóc w migracji, ta silna hermetyzacja została domyślnie wyłączona dla interfejsów API, które istniały w języku Java 8. Począwszy od wersji Java 16, domyślna wartość opcji -- niedozwolona-dostęp programu uruchamiającego jest ustawiona na deny , a nie permit. Chociaż to ograniczenie nie jest zalecane, można go ominać w języku Java 16, podając parametr -- illegal-access=permit. -- niedozwolony-dostęp można również ustawić na wartość warn lub debug , aby mieć taki sam efekt jak permit, ale w celu wydania komunikatu ostrzegawczego podczas używania funkcji warn i stosu wywołań dla niezgodnych z prawem operacji introspektywnych podczas korzystania z 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.