كيف يمكنني طباعة بنيات الفصل في ملف jar باستخدام أداة javap؟
-
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).