2012-06-10 33 views
85

Có thể tắt sonar (www.sonarsource.org) các phép đo đối với các khối mã cụ thể không, mã nào không muốn đo?Tắt Sonar cho một số mã nhất định

Ví dụ là cảnh báo "Giữ nguyên dấu vết ngăn xếp" mà Findbugs xuất ra. Khi rời khỏi máy chủ, tôi cũng có thể chỉ muốn truyền lại thông điệp cho máy khách, không bao gồm ngoại lệ thực sự mà tôi vừa mới bắt, nếu ngoại lệ đó không được khách hàng biết (vì máy khách không có JAR trong đó ngoại lệ được chứa ví dụ).

Trả lời

48

Đây là FAQ. Bạn có thể đặt //NOSONAR trên dòng kích hoạt cảnh báo. Tôi thích sử dụng cơ chế FindBugs mặc dù, trong đó bao gồm trong việc thêm các @SuppressFBWarnings chú thích:

@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
    value = "NAME_OF_THE_FINDBUGS_RULE_TO_IGNORE", 
    justification = "Why you choose to ignore it") 
+1

Đồng ý.Tuy nhiên, tôi không chắc liệu Sonar có diễn giải đúng '@ SuppressFBWarnings' (được thêm vào để tránh xung đột với' java.lang.SuppressWarnings') và cũng bỏ qua nó hay không. –

+0

AFAIK, Sonar sử dụng FindBugs. Vì vậy, nếu FindBugs xử lý các chú thích này, tôi không thấy lý do tại sao chúng không hoạt động khi chạy FindBugs thông qua Sonar. Không nên khó để kiểm tra anyway. –

+4

Liên kết Câu hỏi thường gặp đã lỗi thời. Đây là [FAQ] mới (http://docs.sonarqube.org/display/HOME/Frequently+Asked+Questions#FrequentlyAskedQuestions-Howtoremovefalsepositiveissues?) – wiredniko

116

Bạn có thể chú thích một lớp hoặc một phương thức với SuppressWarnings

@java.lang.SuppressWarnings("squid:S00112") 

mực: S00112 trong trường hợp này là ID phát hành Sonar. Bạn có thể tìm thấy ID này trong giao diện người dùng Sonar. Đi tới Sự cố chi tiết. Tìm sự cố bạn muốn chặn cảnh báo. Trong hộp vấn đề màu đỏ trong mã của bạn, có một liên kết Quy tắc với định nghĩa về một vấn đề nhất định. Khi bạn nhấp vào, bạn sẽ thấy ID ở đầu trang.

+6

Tôi có thể xác nhận rằng điều này cũng hoạt động với ID quy tắc FindBugs cụ thể, ví dụ: '@SuppressWarnings (" tìm kiếm: UI_INHERITANCE_UNSAFE_GETRESOURCE ")'. – bcody

+5

Vấn đề là Eclipse sẽ hiển thị một cảnh báo 'Unsupported @SuppressWarnings (" mực: S00112 ")'. Bạn có thể cấu hình Eclipse để bỏ qua điều này nhưng sau đó một lỗi đánh máy như trong '@SuppressWarnings (" uncheckedd ")' sẽ không được phát hiện. –

40

Tôi khuyên bạn nên cố gắng chặn các cảnh báo cụ thể bằng cách sử dụng @SuppressWarnings("squid:S2078").

Đối với đàn áp nhiều cảnh báo bạn có thể làm điều đó như thế này @SuppressWarnings({"squid:S2078", "squid:S2076"})

Ngoài ra còn có các //NOSONAR bình luận mà nói SonarQube để bỏ qua tất cả các lỗi cho một dòng cụ thể.

Cuối cùng nếu bạn có quyền thích hợp cho giao diện người dùng, bạn có thể phát hành cờ làm dương tính giả trực tiếp từ giao diện.

Lý do tại sao tôi khuyên bạn nên loại bỏ các cảnh báo cụ thể là thực hành tốt hơn để chặn một vấn đề cụ thể thay vì sử dụng //NOSONAR và gây rủi ro cho sự cố về Sonar trong mã của bạn.

Bạn có thể đọc thêm về điều này trong FAQ

Lưu ý: Gábor Bakos được trỏ đến FAQ cũ mà bây giờ 404s. Đây là kết quả google đầu tiên đối với tôi vì vậy tôi muốn giúp đỡ bất cứ ai khác có thể có cùng một câu hỏi

Edit: 6/30/16 SonarQube bây giờ được gọi SonarLint

Trong trường hợp bạn đang tự hỏi làm thế nào để tìm thấy số mực. Chỉ cần nhấp vào thông điệp Sonar (ví dụ: Remove this method to simply inherit it.) và vấn đề Sonar sẽ mở rộng.

Ở phía dưới bên trái, nó sẽ có số lượng mực (ví dụ. squid:S1185 Bảo trì> dễ hiểu)

Vì vậy, sau đó bạn có thể ngăn chặn nó bằng cách @SuppressWarnings("squid:S1185")

+2

Cảm ơn bạn đã gợi ý nhiều cảnh báo sonar cube – AlexWien

+1

Vấn đề khác với việc đánh dấu nó là dương tính giả trên giao diện là nếu vì lý do nào dự án bị xóa và thêm lại, tất cả cờ bạn đã đặt sẽ biến mất. – annedroiid

3

tôi không thể tìm thấy số mực trong sonar 5.6, với chú thích này cũng hoạt động:

@SuppressWarnings({"pmd:AvoidCatchingGenericException", "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.IllegalCatchCheck"}) 
Các vấn đề liên quan