كيف يمكنني طباعة بنيات الفصل في ملف jar باستخدام أداة javap؟

StackOverflow https://stackoverflow.com/questions/1171549

  •  19-09-2019
  •  | 
  •  

سؤال

أريد سرد طرق ملفات الفصل في الجرة باستخدام أداة javap.كيف أفعل ذلك بحيث يسرد الأساليب وأعضاء جميع ملفات الفصل في الجرة.الآن أنا قادر على القيام بذلك لفئة واحدة فقط في كل مرة.

أنا أتوقع شيئا مثل إذا قلت

javap java.lang.*

يجب أن يقوم بإدراج الأساليب والأعضاء من جميع الفئات في حزمة java.lang.إذا لم يكن Javap قادرًا على ذلك، فهل هناك أي أدوات من هذا القبيل متاحة؟

هل كانت مفيدة؟

المحلول

#!/bin/bash
# Set the JAR name
jar=<JAR NAME>
# Loop through the classes (everything ending in .class)
for class in $(jar -tf $jar | grep '.class'); do 
    # Replace /'s with .'s
    class=${class//\//.};
    # javap
    javap -classpath $jar ${class//.class/}; 
done

نصائح أخرى

سيكون الأمر أسهل

JAR=<path to jarfile> \
javap -classpath $JAR $(jar -tf $JAR | grep "class$" | sed s/\.class$//)

قم أولاً بفك ضغط ملف jar، وسينتج عن ذلك سلسلة من الأدلة لكل حزمة، ثم قم بتطبيق أمر javap لكل دليل.

على سبيل المثال، باستخدام Tomcat، يمكنك فك ضغط ملف catalina-balancer.jar في webapps\balancer ثم استخدامه

javap -classpath org\apache\webapp\balancer Rule

الذي يعطي

Compiled from "Rule.java"
interface org.apache.webapp.balancer.Rule{
    public abstract boolean matches(javax.servlet.http.HttpServletRequest);
    public abstract java.lang.String getRedirectUrl();
}

إذا كنت بحاجة إلى القيام بذلك لجميع ملفات الفئة في الحزمة، فستحتاج إلى كتابة برنامج نصي أو برنامج للسير في مسار الفصل وإزالة .class من أسماء الملفات وتمريره إلى javap.

(سيكون من السهل جدًا الكتابة بلغة Perl/bash/Java).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top