我需要分析jar中不同的.class
文件使用(引用)哪些類。我知道jdeps等效於Java 7
jdeps -v example.jar
產生這個輸出。不幸的是,如果用戶只有JDK 1.7,我需要一個可行的解決方案。這怎麼可能實現?
我需要分析jar中不同的.class
文件使用(引用)哪些類。我知道jdeps等效於Java 7
jdeps -v example.jar
產生這個輸出。不幸的是,如果用戶只有JDK 1.7,我需要一個可行的解決方案。這怎麼可能實現?
我已經能夠通過javap -c
和正則表達式過濾器獲得看似良好的結果。
我以前cygwin
獲得我的結果,但你應該能夠做到這一點在任何環境下,所有你需要的是解壓,javap
的工具,並執行正則表達式的工具。在當前的Windows版本中,powershell
將提供這些功能。
下面的代碼將列出每種類別的JAR文件中引用的類:
mkdir workDir
unzip yourJar.jar -d workDir
shopt -s globstar
for classFile in **/*.class; do
echo "Classes used in $classFile :"
javap -c "$classFile" | grep -Eo "([a-zA-Z0-9]+/)+[A-Z][a-zA-Z0-9]*" | sort -u
echo
done
你說你想在一個jar
文件中引用的類,所以假設你不希望每個細節類這應該工作:
mkdir workDir
unzip yourJar.jar -d workDir
shopt -s globstar
for classFile in **/*.class; do
javap -c "$classFile" | grep -Eo "([a-zA-Z0-9]+/)+[A-Z][a-zA-Z0-9]*"
done | sort -u
注意,這將錯過不遵守約定的類,例如這是在默認包或者其名稱不以大寫字母開頭定義。
您還將檢索合格名稱以L
開頭的類:這表示數組,如果您只關心類名,則可能需要除去該L。還有其他類似的單字母修飾符,我不記得了。
謝謝,這似乎工作。 –
@JFMeier要小心,雖然我沒有廣泛地測試它,也沒有遵循java文件規範,我敢肯定它必須缺少至少一些角落案例 – Aaron
使用JD Java Decompiler(http://jd.benow.ca/)。
我肯定會研究,如果它不被我們的公司網絡封鎖爲「流媒體/ MP3」;-) –
我不知道爲什麼會這樣。 Wikepedia也提到了該網站。 https://en.wikipedia.org/wiki/Java_Decompiler。也許你可以讓你的網絡人員去研究它。 – Jool
我不再問爲什麼有些網站被封鎖,有些網站不是... –
另一種解決方案是將JDK1.8放在可訪問的網絡驅動器上,並在那裏調用jdeps
。即使當本地JDK爲1.7時,這也可以工作。
我想技術上你可以用'javap -v'或'-c'來做到這一點,但需要一個JDK8似乎是理智的選擇 – Aaron
看看下面的線程的答案https://stackoverflow.com/questions/4326407/analyze-jar-dependencies-in-a-java-project – SubOptimal
@Aaron該程序的用戶是我們公司的開發人員,它不使用Java 8.我無法對此做任何事情。 –