2009-07-02 44 views
7

FindBugs'ı değerlendirme aşamasındayım ve excludeFilter'ı kullanmaya çalışıyorum, böylece araç test paketlerini veya oluşturulan ejb uzantılarını işlemez.FindBugs ile ilgili sorunlar, filtreyi hariç tut

Aşağıdaki denedim:

<FindBugsFilter> 
<!-- Match any test packages --> 
<Match> 
    <Package name="~.*\.test"/> 
</Match> 
<Match> 
    <Or> 
     <Class name="~.*\.^_*"/> 
     <Class name="~.*EJS*"/> 
    </Or> 
    <Bug pattern="MALICIOUS_CODE"/> 
</Match> 

oluşturulan EJB hala baktı ediliyor. Birisi bu konuda daha iyi bir yön sağlayabilir.

ben ile başlayan tüm sınıfları dışarı çıkarmak istiyorum "_"

Örnek:

com/firmam/iş/yönetim/ejb/_AdminRemoteHome_Stub.java

com/firmam/iş/admin/ejb/_EJSRemoteStatelessAdminHome_054d51b9_Tie.java

Güncelleştirme filtresi dosyası.

Gösterdiğim RegX değişiklikleri kullanarak aşağıdaki yapıya filtre dosyasını değiştirmek ve şimdi işler beklendiği gibi çalışmaktadır:

<FindBugsFilter> 
<!-- Match any test packages --> 
<Match> 
    <Package name="~.*\.test"/> 
</Match> 
<Match> 
    <Class name="~.*\._.*"/> 
</Match> 
<Match> 
    <Class name="~.*?EJS.*"/>  
</Match> 

Geri dönüp tazelemek için ihtiyacınız olduğu anlaşılıyor benim RegX. FindBugFilter İlişkin

+0

EJS sınıfları hala görünüyor mu? Şimdi '_' sınıfları için sorun var mı? – VonC

cevap

7

,

(sadece emin olmak için) Eğer sizin derlenmiş sınıf dosyaları directoriesa düşünen emin değil KaynakYolu nelerdir? (bu SO answer'da belirtildiği gibi). Java element name matching bölümünden

:

Sınıf ismi niteliği, Yöntem veya Alan nitelik içeriğinin kalanı isimlerinin karşılaştırıldıkça bir Java düzenli ifade olarak yorumlanır ~ karakteri ile başlıyorsa söz konusu Java öğesinin

Aşağıdaki normal ifade daha doğru olur mu?

<Class name="~.*\._.*"/> 
    <Class name="~.*?EJS.*"/> 
  • yerine anchor regex desen uygulanır dize başlangıcında eşleşen gerekiyordu çünkü ".*\.^_*" nin ".*\._.*" . ?quantifier için kaçınarak, eşleştirme tembel yapar çünkü

  • yerine ".*?EJS.*" ".*EJS*" Ejs 'yemek'.

+0

Sadece önerinizi kullandım, ancak sınıflar raporda hala görünüyor. , com/firmam/iş/admin/ejb/_AdminRemoteHome_Stub.java Hat 33 \t MALICIOUS_CODE \t Ben aynı sorun var değişken nesne – boyd4715

+0

rapor oluşturulurken ne hatta dışarıda doesnt: boyd4715

+1

başvurusunu iade ederek iç temsil maruz etsin: Burada – HaveAGuess

1

Benim findbugs dosya yukarıdaki gibi çalışma değildi dışlamak (Plus "S*" anlamına gelen "0 veya n S" Burada yardımcı olmuyor). Findbugs-maven-plugin v3.0.0 kullanıyorum. Sorunu çözmek için, findbugsXml adlı bir derlemeyi çalıştırdım.xml, daha sonra:

mvn findbugs:gui 

Bu, Arayüzleri bulmak için Kullanıcı Arabirimini başlatır. Daha sonra findbugsXml.xml dosyasını yükledim, hariç tuttuğum uyarılara yönlendirildim, hariç tutulduktan sonra hariç tutmaları findbugs_exclude.xml dosyasına kaydettim. Ben

<excludeFilterFile>findbugs_exclude.xml</excludeFilterFile> 

oluşturulan dosya işleri olarak maven plugin bu ilave ve istisnalar gerçekten findbugs raporundan atlanmıştır.

<omitVisitors>UnreadFields</omitVisitors> 
0

Bir sınıf hariç gerekiyordu edilirse, onun iç sınıflar dikkatli olun belirtmeyi yararlı olacaktır:

Ben maven plugin için bulunan başka büyük uç

eklemek oldu. Bu yerine

<Match> 
    <Class name="com.some.Proto" /> <!--or com.some.Proto$.*--> 
</Match> 

Ben dışlamak için nasıl bulamadı şimdiye dek bir

<Match> 
    <Or> 
    <Class name="com.some.Proto$Event" /> 
    <Class name="com.some.Proto$Msg" /> 
    <Class name="com.some.Proto$Query" /> 
    </Or> 
</Match> 

Ve tek sayılmış iç sınıflarıyla aşağıdaki yapılandırma kullanması gerektiğini öğrenmek için saatlerimi aldı Bir sınıf ve tüm alt sınıfları (filter'da bir ipucu değil), com.some.Proto$.* gibi basit bir regex çalışmaz. Ve aynı zamanda regex içinde $ satır sonu anlamına gelir, ama findbugs sanırım bir metin karakteri olarak okudum, aksi takdirde com.some.Proto\$Query olmalıdır. Ayrıca, değerli bir regex tester, içindeki her karakteri açıklayarak regex konusunda bana yardımcı oldu.