Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Java

Java 9 में jdeps और jdeprscan टूल्स के बीच अंतर

Java 9 दो स्थैतिक विश्लेषण टूल्स पेश करता है जो अलग-अलग उद्देश्यों की पूर्ति करते हैं: jdeps (निर्भरता विश्लेषक) और jdeprscan (अप्रचलित API स्कैनर)।

त्वरित तुलना

पहलूjdepsjdeprscan
उद्देश्यक्लास/पैकेज/मॉड्यूल निर्भरताओं का विश्लेषण करेंअप्रचलित API उपयोग के लिए स्कैन करें
मुख्य उपयोगमॉड्यूलराइजेशन, निर्भरता विज़ुअलाइज़ेशनमाइग्रेशन योजना, कोड गुणवत्ता
इनपुट.class, .jar, निर्देशिका, मॉड्यूल.class, .jar, निर्देशिका, क्लास नाम
आउटपुटनिर्भरता ग्राफ, पैकेज/क्लास स्तरअप्रचलित API उपयोग की सूची
JDK आंतरिक--jdk-internals फ्लैग--for-removal फ्लैग
थर्ड-पार्टी JARहां, विश्लेषण कर सकते हैंनहीं (केवल JDK API)

jdeps - Java क्लास निर्भरता विश्लेषक

मुख्य कमांड्स

# पैकेज-स्तर निर्भरताएं (डिफ़ॉल्ट)
jdeps MyClass.class
jdeps myapp.jar

# वर्बोज: क्लास-स्तर निर्भरताएं
jdeps -v MyClass.class
jdeps --verbose myapp.jar

# केवल सारांश
jdeps -s myapp.jar

# JDK आंतरिक API उपयोग ढूंढें (माइग्रेशन के लिए महत्वपूर्ण)
jdeps --jdk-internals myapp.jar

# मॉड्यूल निर्भरताएं
jdeps --module-path mods -m my.module

# DOT ग्राफ आउटपुट (Graphviz के साथ विज़ुअलाइज़ करें)
jdeps --dot-output dots myapp.jar
dot -Tpng dots/summary.dot -o deps.png

# मॉड्यूल जानकारी उत्पन्न करें (Java 9+ माइग्रेशन के लिए)
jdeps --generate-module-info output-dir myapp.jar

jdeps आउटपुट उदाहरण

$ jdeps -v MyApp.jar
MyApp.jar -> java.base
MyApp.jar -> java.logging
MyApp.jar -> java.sql
MyApp.jar -> third-party.lib (not found)

com.example.MyApp -> java.lang.Object
com.example.MyApp -> java.util.List
com.example.MyApp -> com.example.internal.Service  (internal)
com.example.MyApp -> jdk.internal.misc.Unsafe     (JDK internal!)

महत्वपूर्ण jdeps विकल्प

jdeps --help  # पूर्ण सूची

मुख्य विकल्प:
  -cp, --class-path PATH      क्लासपथ सेट करें
  --module-path PATH          मॉड्यूल पथ सेट करें
  -p, --package PKG           पैकेज द्वारा फ़िल्टर
  -e, --regex REGEX           पैटर्न द्वारा फ़िल्टर
  -f, --filter REGEX          निर्भरता फ़िल्टर
  --require MODULE            मॉड्यूल द्वारा फ़िल्टर
  -R, --recursive             पुनरावर्ती रनटाइम निर्भरताएं
  -I, --inverse               व्युत्क्रम निर्भरताएं
  --compile-time              कंपाइल-टाइम दृश्य
  --multi-release VERSION     मल्टी-रिलीज JAR संस्करण
  -q, --quiet                 लापता निर्भरताएं छुपाएं

jdeprscan - Java अप्रचलित API स्कैनर

मुख्य कमांड्स

# क्लास/जार/निर्देशिका में अप्रचलित API उपयोग स्कैन करें
jdeprscan MyClass.class
jdeprscan myapp.jar
jdeprscan /path/to/classes

# विशिष्ट JDK रिलीज़ के लिए अप्रचलित API सूचीबद्ध करें
jdeprscan --list --release 8
jdeprscan --list --release 11

# केवल हटाने के लिए अप्रचलित (--for-removal)
jdeprscan --for-removal myapp.jar

# वर्बोज आउटपुट
jdeprscan -v myapp.jar

# क्लासपथ सेट करें (निर्भरता समाधान के लिए)
jdeprscan --class-path lib/* myapp.jar

jdeprscan आउटपुट उदाहरण

$ jdeprscan myapp.jar
myapp.jar -> com.example.MyClass
   com.example.MyClass -> method java.lang.Thread.stop()  (deprecated)
   com.example.MyClass -> method java.lang.System.runFinalizersOnExit()  (deprecated, for removal)
   com.example.MyClass -> constructor java.util.Date(int,int,int)  (deprecated)

$ jdeprscan --list --release 8
java.lang.Thread.stop()
java.lang.Thread.suspend()
java.lang.Thread.resume()
java.lang.System.runFinalizersOnExit()
java.util.Date(int, int, int)
java.util.Date(int, int, int, int, int)
...

jdeprscan विकल्प

jdeprscan --help

विकल्प:
  --class-path PATH      निर्भरता समाधान के लिए क्लासपथ
  --for-removal          केवल हटाने के लिए अप्रचलित (Java 9+)
  --full-version         पूर्ण संस्करण स्ट्रिंग
  -h, --help             सहायता
  -l, --list             अप्रचलित API सूचीबद्ध करें (स्कैन न करें)
  --release 6|7|8|9|10|11|12...  लक्ष्य JDK रिलीज़
  -v, --verbose          वर्बोज आउटपुट
  --version              संस्करण जानकारी

व्यावहारिक माइग्रेशन वर्कफ्लो

चरण 1: निर्भरताओं का विश्लेषण (jdeps)

# 1. मॉड्यूलराइजेशन के लिए निर्भरताएं ढूंढें
jdeps --generate-module-info mods myapp.jar

# 2. JDK आंतरिक API पहचानें (Java 9+ में हटाए गए/कैप्सूलित)
jdeps --jdk-internals myapp.jar

# 3. थर्ड-पार्टी निर्भरताएं जांचें
jdeps -R --class-path "lib/*" myapp.jar

चरण 2: अप्रचलित API स्कैन करें (jdeprscan)

# 1. सभी अप्रचलित उपयोग स्कैन करें
jdeprscan --class-path "lib/*" myapp.jar

# 2. केवल हटाने के लिए अप्रचलित (तत्काल कार्रवाई आवश्यक)
jdeprscan --for-removal --class-path "lib/*" myapp.jar

# 3. लक्ष्य JDK के लिए क्या अप्रचलित है देखें
jdeprscan --list --release 17

CI/CD में एकीकरण

Maven प्लगइन

<plugin>
    <groupId>com.github.spotbugs</groupId>
    <artifactId>spotbugs-maven-plugin</artifactId>
    <configuration>
        <jdeprscan>true</jdeprscan>
    </configuration>
</plugin>

Gradle टास्क

task jdeprscan(type: Exec) {
    commandLine 'jdeprscan', '--for-removal', '--class-path', 
                configurations.runtimeClasspath.asPath, 
                "$buildDir/classes/java/main"
}

सारांश: कब क्या उपयोग करें

  • jdeps उपयोग करें जब: मॉड्यूलराइज़ कर रहे हैं, निर्भरताएं विज़ुअलाइज़ कर रहे हैं, JDK आंतरिक उपयोग ढूंढ रहे हैं, मॉड्यूल जानकारी उत्पन्न कर रहे हैं
  • jdeprscan उपयोग करें जब: नए JDK में माइग्रेट कर रहे हैं, कोड गुणवत्ता जांच रहे हैं, हटाने के लिए अप्रचलित API ढूंढ रहे हैं, अप्रचलन सूची उत्पन्न कर रहे हैं
  • दोनों एक साथ उपयोग करें: पूर्ण माइग्रेशन मूल्यांकन के लिए - jdeps संरचनात्मक निर्भरताएं दिखाता है, jdeprscan API-स्तर की समस्याएं दिखाता है
  1. - जावा में Collection और Collections में अंतर?

    Collection एक इंटरफेस है जबकि Collections जावा में एक यूटिलिटी क्लास है। Set, List, और Queue Collection इंटरफेस के कुछ सबइंटरफेस हैं, एक Map इंटरफेस भी Collections फ्रेमवर्क का हिस्सा है, लेकिन यह Collection इंटरफेस को इनहेरिट नहीं करता। Collection इंटरफेस के महत्वपूर्ण मेथड्स हैं add(), remove(),

  1. Java में JTextField और JFormattedTextField के बीच क्या अंतर हैं? Java में JTextField और JFormattedTextField के बीच क्या अंतर हैं?

    एक JTextField का उपयोग सादे टेक्स्ट के लिए किया जा सकता है जबकि एक JFormattedTextField एक क्लास है जो JTextField को विस्तारित करती है और इसका उपयोग उस टेक्स्ट पर कोई भी फॉर्मेट सेट करने के लिए किया जा सकता है जो इसमें होता है जैसे फोन नंबर, ई-मेल, तारीखें आदि। JTextField एक JTextField सबसे महत्वपू

  1. Java में JScrollBar और JScrollPane के बीच क्या अंतर हैं? Java में JScrollBar और JScrollPane के बीच क्या अंतर हैं?

    एक JScrollBar एक घटक है और यह अपने इवेंट को स्वयं नहीं संभालता जबकि एक JScrollPane एक कंटेनर है और यह अपने इवेंट को स्वयं संभालता है और अपनी स्क्रॉलिंग करता है। एक JScrollBar में JScrollPane नहीं हो सकता जबकि एक JScrollPane में JScrollBar हो सकता है। JScrollBar JScrollBar क्लास का ऑब्जेक्ट क्षैतिज