2010-03-03 36 views

cevap

3

Uygulamanızın tüm kavanozlarını kullanabilmesi için egzersiz yapabileceğinizden eminseniz, basit bir şekilde oluşturabilirsiniz. perl komut:

while (<>) { 
    $l{$1}++ if m/\s+from\s+(.+\.jar)/; 
} 

for $l (keys(%l)) { 
    print "$l\n"; 
} 

(o list_jars.pl adını sağlar) ve ona bir ayrıntılı çalışma çıktısını beslemek:

java -verbose -jar YOUR_APP.jar | perl list_jars.pl 

yüklenen sınıflarının tüm kaynaklarını listeler gerekir.

+0

şimdi gerçekten düzgün bir numara – radai

+0

Web uygulama arşivi (savaş) varsa ne olur? – Trick

+0

Perl betiği, bir web uygulaması için, başlangıç ​​parametreleri için -verbose ekleyebilmeniz ve sonuçta ortaya çıkan standart çıktı günlüğünü ayrışabilmeniz için ayrıntılı sınıf yükleyici çıktısını ayrıştırır. (Bu muhtemelen, sunucu kabı tarafından kullanılan kavanozları gösterecektir.) – rsp

0

Oluşturma yolunuzdan bunları tek tek kaldıran, projeyi derleyen ve derleme hatalarını denetleyen bir komut dosyası yazın. Komut, kullanılmayan kavanozların bir listesini oluşturacaktır. Bash/python'da yazmak kolay olmalı.

Bu çözüm, çalışma bağımlılıklarını yansımayı temel alarak izleyemez (aşağıdaki yorumuma bakın).

+2

aşağı kırmak imkansız olduğu gerçeği Bu derleme zamanı hataları bulacaksınız, ancak çalışma zamanında sonuçlanan hataları değil gecikmeli sınıf yüklemesi başarısızlıkları. Özellikle karmaşık çerçevelerle böyle şeyler oldukça yaygındır. Daha da kötüsü, çerçevenin belirli bir arabirim için kullanılabilir bir sınıfı seçmesi ve davranışın, gerçekte hangi uygulamanın gerçekte kullanıldığına bağlı olarak farklılık göstermesidir. Tamamlandığını düşündükten sonra tam bir entegrasyon testi yaptırmanızı şiddetle tavsiye ederim. –

+0

Haklısınız, bu çözüm bu davayı ele almıyor. Ama bazı gelişmiş yansıma kullanırsanız bunu otomatik olarak yapmak imkansız olduğunu düşünüyorum. Ne yaparsınız, koddaki tüm dizeleri bir sınıf adıyla eşleşen olabilir:>? – pajton

+0

Ayrıca, Eclipse IDE aracılığıyla öğeleri bir defada .classpath öğesinden kaldırarak ve projeyi yeniden oluşturarak da yapabilirsiniz. İşler kırmızı olduğunda, kullanımda olanı kaldırdınız. ;-) –

1

Eğer maven kullanıyorsanız, bunun için bir mojo var: mvn bağımlılık: analiz et değilse, herhangi bir kolay yol bilmiyorum. zor yolu, ithalatı denetlemek için projenizin tüm derlenmiş sınıflarının bytecode analizini içeriyordu ...

+0

ve bunu düşünmeye bile gel, yansıma yakalayamasa bile ... – radai

+0

Hayır ... Ama maven, pom.xml'de bildirilen bağımlılıkları yakalar ancak kodda açıkça görülmez (örneğin çerçeveler ve dinamik olarak yüklenmiş sürücüler). –

0

Belki yüklenen sınıfların yollarını kaydeden java.lang.ClassLoader'dan miras alarak kendi ClassLoader'ınızı yazabilirsiniz? Bu, tüm olası kod yolları boyunca yüklenen tüm sınıfların tam kapsamını sağlama sorununu çözmese de,

1

stan kullanıyorum. java için bir yapı analizcisi ve bana çok iyi sonuçlar verdi.

Hangi kavanozun kullanıldığını ve hangilerinin görünmediğini görsel olarak görebilirsiniz.

İlgili konular