Przegląd narzędzi JDK

jdeprscan

Narzędzie używane do statycznej analizy klas, archiwów i folderów na obecność elementów API oznaczonych jako deprecated. Co to znaczy deprecated dowiesz się tutaj: Co to znaczy ‘deprecated’?. Narzędzie wykrywa tylko elementy oznaczone jako deprecatedw Java SE. Nie wykrywa tak oznaczonych elementów w innych bibliotekach. Wszystkie klasy, od których zależy badana klasa czy zestaw klas – muszą być dostępne – podobnie jak przy kompilowaniu czy uruchamianiu klasy. W przypadku braku klas zależnych narzędzie podaje listę niedostępnych klas poprzedzonych słowem error:
error: cannot find class ...

Składnia

jdeprscan [options] {dir|jar|class}

[options]

[options] Opis
--class-path path Scieżka wyszukiwania niezbędnych klas. Jeśli chcemy wskazać więcej niż jedną ścieżkę – ścieżki oddzielone są średnikiem ; (w Windows) albo dwukropkiem : (Solaris, Linux, macOS) (--class-path \some\directory;\another\different\dir). Jeśli chcesz wiedzieć więcej zajrzyj do Co to jest CLASSPATH?
--for-removal Ogranicza skanowanie do API, które są oznaczone słowem deprecated i przeznaczone do uusnięcia w przyszłości. Nie może być użyte w Java 6, 7, 8. Może być użyte w Java 9, 10, 11, 12
--full-version Wypisuje na konsoli pełny opis narzędzia
--help albo -h Wypisuje na konsoli pełną informację pomocy
--list albo -l Wyświetla na konsoli zestaw API oznaczonych jako deprecated
--release 7|8|9|10|11|12 Ogranicza wyszukiwanie do API, które były oznaczone deprecated w podanej wersji Java
--verbose albo -v Udostępnia wydruk dodatkowych informacji podczas przetwarzania
--version Wyświetla skróconą nazwę tego narzędzia

{dir|jar|class}

{dir|jar|class} Opis
dir folder
jar archiwum
class nazwa klasy lub pliku klasy
Nazwa klasy powinna być pełna (java.lang.Thread)
Nazwa klasy zagnieżdżonej powinna byc poprzedzona znakiem dolara $ (java.lang.Thread$State)
Nazwa pliku powinna obejmować ścieżkę (build/classes/java/lang/Thread$state.class)

Przykład

Mamy dwa projekty Netbeans 8.2 (Rys. 169)


Rys. 169. Układ projektów Netbeans

Projekt jdeprscan1 zawiera 3 klasy. Nie ma klasy uruchamiającej.
Projekt jdeprscan2 wymaga obecności bibliotek Apache Derby. Klasa R007 zawiera metodę main. Z trzech bibliotek derby.jar, derbyclient.jar oraz derby.net potrzebna jest jedynie pierwsza biblioteka.
Pliki archiwów jdeprscan1.jar oraz jdeprscan2.jar oraz biblioteki umieszczamy na dysku w folderze c:/jtools1.


Rys. 170. Archiwa i foldery w folderze jtools1

W folderze lib znajduje się biblioteka Apache Derby: derby.jar.

Użycie jdeprscan


Rys. 171. Użycie narzędzia jdeprscan - przykład 1

W przypadku badania zgodności z Java 8 otrzymujemy informację, o braku klasy, która pojawiła się dopiero w Java 9 - nie jest obecna w pliku *.java, ale jest użyta w pliku *.class.
W Java 11 i 12 otrzymujemy informację o niewłaściwym użyciu konstruktora klasy Double, w klasie Vector2 i Polar. Zamiast nazwy metody jest <init>, co oznacza konstruktor.
Pojawienie się oznaczenia <clinit> oznaczałoby inicjalizator klasy statycznej.
(D)V oznacza odpowiednio listę argumentów - w tym przypadku double oraz typ zwracany (V) - w tym wypadku void. Podwojone (II) oznaczałoby dwa argumenty typu int.

 @Override
    public int hashCode() {
        return 17 * new Double(x).hashCode() + 19 * new Double(y).hashCode();
    }

powinno być poprawione na:

 @Override
    public int hashCode() {
        return 17 * Double.valueOf(x).hashCode() + 19 * Double.valueOf(y).hashCode();
    }

Rys. 172. Użycie narzędzia jdeprscan - przykład 2

W tym wypadku musimy wskazać obecność biblioteki derby.jar.
Można to uczynić na 3 sposoby:

  • Umieścić informację o położeniu pliku *.jar zmiennej środowiskowej CLASSPATH np. ".;C:\jtools1\lib\derby.jar;"
  • Umieścić wpis --class-path \lib w wierszu poleceń przy wywołaniu narzędzia jdeprscan jak na Rys. 172
  • Umieścić informację w pliku META-INF\MANIFEST.MF w badanym pliku *.jar jak na poniższym zrzucie
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.7
Created-By: 1.8.0_221-b11 (Oracle Corporation)
Class-Path: lib/derby.jar lib/derbyclient.jar lib/derbynet.jar
X-COMMENT: Main-Class will be added automatically by build
Main-Class: jdeprscan2.R007

Jeden komentarz

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *