8

Używam w projekcie checkstyle i mam zdefiniowane SuppressionFilter w mojej konfiguracji checkstyle. Używam mrówek Apache do tworzenia automatycznych kompilacji za pomocą ciągłej integracji.Jak zdefiniować suppressions-definicje dla checkstyle, które działają zarówno z ant i eclipse

Moje problemy wynikają z następującej sytuacji: Nie chcę wypełniać dużej ilości plików w projekcie opartym na projekcie, więc pliki checkstyle.xml i suppressions.xml znajdują się w podkatalogu o nazwie conf (dla konfiguracji dla kompilacji)). Teraz Ant i Eclipse działają inaczej, szukając suppressions.xml.

Ant korzysta z projectirodeir jako basedir w celu znalezienia suppressions.xml, po tym jak zadeklarowałem ant-task, aby znaleźć checkstyle.xml z podstawową konfiguracją checkstyle. Ten checkstyle.xml zawiera teraz następujące:

<module name="SuppressionFilter"> 
    <property name="file" value="conf/suppressions.xml"/> 
</module> 

ten sposób mrówka-build znajdzie się suppressions.xml, ponieważ basedir z kompilacji jest projekt-katalog.

Teraz użycie funkcji checkstyle-plugin w programie Eclipse powoduje problem. Szuka suppressions.xml zaczynając od ścieżki, którą checkstyle.xml ma (conf). Dla Eclipse deklaracja musiała wyglądać tak, aby praca:

<module name="SuppressionFilter"> 
    <property name="file" value="suppressions.xml"/> 
</module> 

EDIT: Nawet to nie zadziała, Eclipse wydaje się potrzeba zawsze ścieżki bezwzględnej.

Chciałbym wiedzieć, że zarówno Eclipse, jak i Ant mogą pracować z tą samą konfiguracją checkstyle. Ktoś zna rozwiązanie tego problemu? Ścieżki bezwzględne nie są rozwiązaniem, ponieważ każdy programista i serwer CI mają różne ścieżki do katalogu projektu.

Odpowiedz

6

Użyj funkcji Checkstyle za property expansion. W swojej checkstyle.xml zadeklarować SupressionFilter jak:

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

Następnie modyfikować swoje zadanie Checkstyle w skrypcie kompilacji Ant obejmuje właściwość zagnieżdżonego:

<checkstyle config="conf/checkstyle.xml"> 
    <fileset dir="src" includes="**/*.java"/> 
    <property key="checkstyle.suppressions.file" value="conf/suppressions.xml"/> 
</checkstyle> 
+0

Dzięki, że działa. Jedynym wyjątkiem jest mój błąd w opisie, Eclipse wydaje się potrzebować bezwzględnej ścieżki. – Mnementh

9

To pytanie jest dość stary, ale Znalazłem lepszy sposób to zrobić przy użyciu wtyczki Eclipse Checkstyle, właściwość ${samedir} rozwija się do katalogu, w którym znajduje się plik konfiguracyjny:

W twoim przypadku, konfiguracja modułu będzie wyglądać następująco:

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

Ant cel również ustawić właściwość samedir:

<checkstyle config="${checkstyle.tool.dir}/checks.xml" failOnViolation="false"> 
    <fileset dir="${src.dir}" includes="**/*.java" /> 
    <property key="samedir" value="${checkstyle.tool.dir}/conf" /> 
</checkstyle> 
+0

Rewizja. $ {samedir} jest tym, o co prosiłem. –

+1

Możesz użyć '$ {basedir}' (zobacz link dla większej ilości ścieżek) dla ścieżki względnej projektu. Pozwala to na użycie wspólnego 'checkstyle.xml' dla wielu projektów, ale nadal zachowuje pliki tłumienia dla każdego projektu. –

+0

Czy istnieje sposób użycia $ {samedir} w gradle checkstyle-plugin? http://stackoverflow.com/questions/29602867/using-samedir-in-gradle-and-eclipse – Edward

Powiązane problemy