2011-05-19 14 views
5

Sınıf yolu veya klasör verilebilecek ve belirli bir sınıfa başvurular arayan tüm .jar dosyalarını arayabilecek araçlar var mı?Java kavanozlarındaki tüm bağımlılıkları bulma araçları

this kind of problem numaralı telefonu çözümlemek için beni arama yaparak kurtardı. Benim durumumda, JBoss'un NoClassDefFoundError nedeniyle doğru şekilde başlatılmasından dolayı bir sınıfa hileli bir referansın nereden geldiğini bulmak zorunda kaldım. Sanırım bunu şu şekilde arıyorum:

java -jar magicbullet.jar /path/to/search com.myproject.DodgyClass 
Searching... 
com.problematic.Otherclass in /path/to/search/dodgy.jar implements com.myproject.DodgyClass 

Ya da benzer. Değilse, bir tane yazacağım.

+0

Bkz. [Java sınıfı bulma aracı] (http://stackoverflow.com/questions/5577543/java-class-finder-tool) – wjans

+0

daha çok bunu okudum, daha az anladım. Sorun nedir? Belirli bir sınıfın hangi jarte sahip olduğunu bulmak mı istiyorsunuz yoksa belirli bir sınıfa başvuranın kim olduğunu bilmek ister misiniz? – Kaj

+0

Benim durumumda hangi kavanozda hangi sınıfın başka bir sınıfa başvurduğunu bulmak istedim. Bir NoClassDefError'un nereden geldiğini bulmaya çalışırken yaşları harcadım, sonunda kavanozlarımızdan birinde yer alan sınıflardan birinin sınıf yolunda olmayan bir arayüz oluşturduğunu keşfettim. JBoss'un hata mesajı yardımcı olmaktan daha azdı. Aradığım gibi bir araç çok çabuk bulabilirdi. – Rich

cevap

3

Kullanım Tattletale - .

+0

Harika bir araç gibi görünüyor, ama "sınıf X'e referans veren sınıflar" sorusunu cevaplayamadığını göremedim. – Kaj

+0

Tattletale size "sınıf X'e hangi sınıfları atıfta bulunuyor" cevabını verir. ". Ayrıca kavanoz dosyaları arasında bağımlılıklar da verir. Ayrıca size geçiş bağımlılıkları ve döngüsel bağımlılıklar hakkında bilgi verir. En kullanışlı bulduğum rapor, bir sınıf yanlış bir jar sürümünden yüklenirse, sınıf yolu sorunlarını çözmenize yardımcı olan 'Sınıf Yeri' dir. – sinha

3

Linux (veya Windows üzerinde Cygwin) altında, https://gist.github.com/980697'dan komut dosyası kullanabilirsiniz.

Kullanımı: findclass.sh <directory> <className>

Örnek: findclass.sh . ClassName (anlamı "Tüm kavanoz/savaşlar/kulakların içine SınıfAdı adında bir sınıf için arama/sars geçerli dizinde ve tüm alt dizinleri içinde bulunan")

+0

Bu, bir sınıfın başka bir sınıfa atıfta bulunup bulunmadığını söyleyemez. – Kaj

+0

Ancak eksik sınıfın nerede olduğunu söyleyecektir. Bu nedenle, NoClassDefFoundError, çalışma zamanı sınıf yoluna ek bir kavanoz ekleyerek (veya yanlış jar'leri doğru olanla değiştirerek) düzeltilebilir. –

0

tarihinde "JarAnalyzer" için tam olarak ne istediğinizi yapan bir yardımcı araç (ve biraz daha; D)

İlgili konular