2008-10-13 37 views
5

Tôi có thiết lập bộ lọc triệt tiêu kiểu kiểm tra (ví dụ: số ma thuật bỏ qua trong mã kiểm tra đơn vị).bộ lọc kiểu séc + bộ lọc triệt tiêu

Tệp xml đàn áp nằm trong cùng thư mục với tệp xml kiểu kiểm tra. Tuy nhiên, nơi tệp này thực sự khác nhau: trên hộp dev cửa sổ của tôi, nó nằm trong d: \ dev \ shared \ checkstyle \ config trên máy chủ Linux CI, nó sẽ nằm trong/root/repo/shared/checkstyle/config trên một nhà phát triển hộp nó có thể được bất cứ nơi nào (họ kiểm tra repo svn của họ để).

Điều "nhất quán" duy nhất là tệp nén luôn nằm trong cùng thư mục với tệp xml kiểu kiểm tra. Tôi không thể tìm ra cách đảm bảo rằng tệp này luôn được chọn một cách nhất quán. Ngoài ra tôi không biết tại sao checkstyle không hỗ trợ nhúng đàn áp trong tập tin xml checkstyle.

trợ giúp nào?

Trả lời

10

Tôi đã có cùng một vấn đề này với cấu hình triệt tiêu kiểu kiểm tra khi tôi chuyển qua lại giữa Linux và Windows. Đây là cách tôi giải quyết nó trong hệ thống xây dựng dựa trên Ant của mình:

Về cơ bản, tôi chèn giá trị thư mục nền tảng cụ thể vào tệp cấu hình Checkstyle chính bằng cách định cấu hình tệp thuộc tính Checkstyle với tập lệnh xây dựng Ant.

Tệp cấu hình Checkstyle chính của tôi có khai báo mô-đun SuppressionFilter như được hiển thị bên dưới. Giá trị của tài sản checkstyle-suppressions-file xuất phát từ một thuộc tính Checkstyle file:

<module name="SuppressionFilter"> 
    <property name="file" value="${checkstyle-suppressions-file}"/> 
</module> 

các Checkstyle thuộc tính tập tin không phải là tĩnh, nó được tạo ra bởi một xây dựng kịch bản Ant từ một thuộc tính tập tin mẫu được gọi là template-checkstyle.properties. Đây là những gì mẫu trông giống như đối với tài sản đàn áp file:

che[email protected][email protected]/checkstyle_suppressions.xml 

Ant bản sao của tôi xây dựng kịch bản tập tin này vào một tập tin có tên checkstyle.properties. Bản sao có dấu hiệu đặc biệt thay thế bằng giá trị hợp lý của thư mục mà tập tin được tìm thấy đàn áp:

<copy file="${scm.dir}/template-checkstyle.properties" tofile="${scm.dir}/checkstyle.properties"> 
    <filterset> 
     <filter token="SCM_DIR" value="${scm.dir.unix}"/> 
    </filterset> 
</copy> 

Bây giờ, nơi nào giá trị của scm.dir.unix đến từ đâu? Vâng, đó là bắt nguồn từ từ thuộc tính của bản dựng của tôi, hãy đọc tiếp. Bạn sẽ cần chỉ định một giá trị như vậy với các giá trị thư mục mà bạn đã đề cập.

Lưu ý rằng có một vấn đề hơi không rõ ràng liên quan đến cách bạn chỉ định thư mục này. Tôi nói rằng giá trị scm.dir.unix bắt nguồn từ thuộc tính xây dựng vì tôi quan sát thấy tệp cấu hình Checkstyle chính không thể chứa dấu gạch chéo ngược, tức là ký tự dấu tách Windows, trong giá trị thuộc tính file của mô-đun SuppressionFilter. Ví dụ, chỉ định một cái gì đó như C:\foo\bar\baz dẫn đến một thông báo lỗi Checkstyle nói rằng không thể tìm thấy C:foobarbaz.Tôi làm việc này bằng cách "chuyển đổi" các scm.dir thư mục build tài sản sang một định dạng "unix" với pathconvert nhiệm vụ của Ant:

<pathconvert targetos="unix" property="scm.dir.unix"> 
    <path location="${scm.dir}"/> 
</pathconvert> 

Sau đó tôi gọi là nhiệm vụ Ant checkstyle như thế này:

<checkstyle config="${scm.dir}/checkstyle_checks.xml" 
      properties="${scm.dir}/checkstyle.properties"> 
    <!-- details elided --> 
</checkstyle> 

Cuộc gọi tác vụ checkstyle tiêm cặp khóa/giá trị có trong tệp checkstyle.properties vào cấu hình Checkstyle chính.

Nếu bạn thích, bạn có thể xem toàn bộ kịch bản here

Hope this helps

+0

Cảm ơn những lời khuyên, kiến ​​kiến ​​của tôi bây giờ là tốt, bỏ qua các con số ma thuật trong các lớp Test (đó là một sự khởi đầu!). Tôi phải thực hiện một thay đổi đối với mã được cung cấp của bạn (để tham khảo bất kỳ ai khác có thể đến sau này), nhiệm vụ thiếu "lọc = true"; ít nhất là khi chạy với phiên bản kiến ​​của tôi. –

2

tôi nhận được đường dẫn tuyệt đối đến thư mục mà build.xml cư trú bằng cách sử dụng ant.file biến và tên của dự án:

<project name="common" ... > 
    <dirname property="thisdir" file="${ant.file.common}"/> 

Sau đó, tôi có thể nối một đường dẫn tuyệt đối đến tập tin cấu hình checkstyle tôi:

checkstyle.suppressions.file=${thisdir}/qclib/checkstyle-suppressions.xml 

Vì biến số thisdir xuất phát từ kiến, có vẻ như không cần chuyển đổi đường dẫn.

2

Nếu bạn đang làm việc với nhật thực và bạn có file ức chế trong cùng thư mục với cấu hình checkstyle bên ngoài, bạn có thể thiết lập một bộ lọc ức chế như thế này:

<module name="SuppressionFilter"> 
    <property name="file" value="${config_dir}/my_suppressions.xml"/> 
</module> 

Bạn cũng phải xác định $ { config_dir} sở hữu trong cấu hình checkstyle:

Preferences

Eclipse -> "Checkstyle" -> Chọn cấu hình cs của bạn -> "Properties .." -> "Additional Properties .."

Xác định một tài sản cho checkstyle config dir:

config_dir ---> ${config_loc} 
6

Trong nhật thực tôi đặt những điều sau đây mà không đòi hỏi tôi phải thêm bất kỳ thuộc tính bổ sung:

<module name="SuppressionFilter"> 
    <property name="file" value="${samedir}/suppressions.xml"/> 
</module> 
1

Tôi nghĩ rằng câu trả lời của Robert có thể được mở rộng đến một giải pháp dễ dàng cho kiến ​​và Eclipse:

Bao gồm tệp đàn áp bên trong XML cấu hình của bạn như sau:

<module name="SuppressionFilter"> 
    <property name="file" value="${samedir}/suppressions.xml"/> 
</module> 

Bây giờ, Eclipse đã hài lòng và tìm thấy tệp.

Để có được kiến ​​làm việc cập nhật mục tiêu của bạn để một cái gì đó như thế này:

<checkstyle config="${checkstyle.config}/checkstyle-checks.xml"> 
    <!-- ... --> 
    <property key="samedir" value="${checkstyle.config}"/> 
</checkstyle> 

Hope this helps.