我正在處理的項目有大約10個jar文件作爲庫。在其中一個文件的頂部有一個導入語句,如:Java - 如何找出導入來自哪個Jar文件?
import jpe.nar.crat.maker.ObjectMakerFactory;
有沒有辦法告訴它來自哪個Jar文件?
(我使用NetBeans如果該事項。)
我正在處理的項目有大約10個jar文件作爲庫。在其中一個文件的頂部有一個導入語句,如:Java - 如何找出導入來自哪個Jar文件?
import jpe.nar.crat.maker.ObjectMakerFactory;
有沒有辦法告訴它來自哪個Jar文件?
(我使用NetBeans如果該事項。)
您可以使用CodeSource#getLocation()
這一點。 CodeSource
可通過ProtectionDomain#getCodeSource()
獲得。 ProtectionDomain
又可通過Class#getProtectionDomain()
獲得。
URL location = ObjectMakerFactory.class.getProtectionDomain().getCodeSource().getLocation();
System.out.println(location.getPath());
// ...
您可以使用netbeans的Jar Class Search。我不確定它是否仍然兼容,但值得一試。
以編程方式或交互方式?
您可以試試DocJar。在Eclipse控件中單擊該項目將顯示您(編輯面板將顯示源代碼(如果附加)或可用的方法,而包資源管理器將打開樹的類),我會感到驚訝,如果Netbeans不表現在類似莊園。
我喜歡JFind非常多:
...它通過尋找到罐子的工作遞歸,內部戰爭,耳內的,等等
如果您纏繞Java啓動程序在shell腳本中,並將其放在PATH上,它將成爲一個非常強大的工具:
Ie找到所有EntityManager
類目錄jboss-6.0.0.20100429-M3
:
$ jfind.sh EntityManager ./jboss-6.0.0.20100429-M3
Search String: EntityManager
Windows Search Location: jboss-6.0.0.20100429-M3
....jjj.jjjjjjjjjjj
ClassName = javax/persistence/EntityManager.class
JarName = jboss-6.0.0.20100429-M3\client\hibernate-jpa-2.0-api.jar
----------------
jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
ClassName = org/apache/xerces/impl/XMLEntityManager.class
JarName = jboss-6.0.0.20100429-M3\client\xercesImpl.jar
----------------
小殼包裝使用Cygwin中:
if [ $# -ne 2 ]
then
echo "Usage: `basename $0` <classname> [<fromDir>]"
exit 1
fi
echo Search String: $1
SEARCH_LOCATION=`cygpath -w $2`
echo Windows Search Location: $SEARCH_LOCATION
java -jar `cygpath -w $HOME/bin/JFind.jar` "$1" "$SEARCH_LOCATION"
echo
您是否嘗試過做一個「開放宣言」的類?在Eclipse中,當你這樣做時,它會打開一個窗口,顯示jar的名稱並告訴你這個jar有'No Source Attachment'。我希望NetBeans能夠發生類似的情況。
感謝, [R
礦,湯姆的前同事,寫道JarSniffer(http://sourceforge.net/projects/jarsniffer/)。這是一個方便的小工具,可以在一組jar,zip和目錄樹中找到一個類。
在Netbeans IDE中: 在您的代碼中,按ctrl-選擇類名稱。在編輯器中出現相關的java文件後(如果你沒有這個類的源代碼,它可能不會顯示太多)。右鍵單擊源窗口中的任意位置,然後選擇「選擇項目」。該類將在其來源的jar中顯示爲突出顯示。
至少早在Netbeans 8.0中就已經開始工作了。