CheckStyle + 억제 필터
-
10-07-2019 - |
문제
체크 스타일 억제 필터 설정이 있습니다 (예 : 단위 테스트 코드에서 마법 번호를 무시합니다).
suppression XML 파일은 CheckStyle XML 파일과 동일한 폴더에 있습니다. 그러나이 파일이 실제로 변하는 경우 : 내 Windows Dev Box에서는 D : dev shared checkstyle linux ci 서버의 구성이 있습니다. 다른 개발자 상자에/root/repo/shared/checkstyle/config가 있습니다. 어디서나있을 수 있습니다 (SVN 리포지기를 확인합니다).
유일한 "일관된"것은 억제 파일이 항상 CheckStyle XML 파일과 동일한 폴더에 있다는 것입니다. 이 파일이 항상 지속적으로 픽업되도록하는 방법을 해결할 수 없습니다. 또한 CheckStyle이 CheckStyle XML 파일 내에서 임베디드 억제를 지원하지 않는 이유를 모르겠습니다.
도움이 있습니까?
해결책
Linux와 Windows 사이를왔다 할 때 CheckStyle 억제 구성과 같은 문제가있었습니다. ANT 기반 빌드 시스템에서 해결 방법은 다음과 같습니다.
기본적으로 ANT 빌드 스크립트로 CheckStyle 속성 파일을 구성하여 적절한 플랫폼 별 디렉토리 값을 기본 체크 스타일 구성 파일에 주입합니다.
내 메인 체크 스타일 구성 파일에는 a가 있습니다 SuppressionFilter
아래와 같이 모듈 선언. 의 가치 checkstyle-suppressions-file
속성은 CheckStyle Properties 파일에서 제공됩니다.
<module name="SuppressionFilter">
<property name="file" value="${checkstyle-suppressions-file}"/>
</module>
CheckStyle Properties 파일은 정적이 아니며 속성 파일 템플릿에서 Ant 빌드 스크립트에 의해 생성됩니다. template-checkstyle.properties
. 다음은 억제 파일 속성에 대한 템플릿의 모습입니다.
checkstyle-suppressions-file=@SCM_DIR@/checkstyle_suppressions.xml
내 개미 빌드 스크립트는이 파일을 명명 된 파일로 복사합니다. checkstyle.properties
. 사본에는 특수 토큰이 억제 파일을 찾는 디렉토리의 적절한 값으로 대체되었습니다.
<copy file="${scm.dir}/template-checkstyle.properties" tofile="${scm.dir}/checkstyle.properties">
<filterset>
<filter token="SCM_DIR" value="${scm.dir.unix}"/>
</filterset>
</copy>
이제 가치는 어디에 있습니까? scm.dir.unix
나왔어? 글쎄요 파생 내 빌드의 속성에서 읽으십시오. 언급 한 디렉토리 값으로 이러한 값을 지정해야합니다.
이 디렉토리를 지정하는 방식과 관련하여 약간의 불쾌한 문제가 있습니다. 나는 그렇게 말한다 scm.dir.unix
메인 체크 스타일 구성 파일에 백 슬래시 (즉 file
의 속성 SuppressionFilter
기준 치수. 예를 들어, 같은 것을 지정합니다 C:\foo\bar\baz
체크 스타일 오류 메시지로 이어집니다 C:foobarbaz
찾을 수 없다. 나는 이것을 "변환"하여 이것을 해결합니다 scm.dir
디렉토리 개미가있는 "unix"형식으로 속성을 빌드 pathconvert
직무:
<pathconvert targetos="unix" property="scm.dir.unix">
<path location="${scm.dir}"/>
</pathconvert>
그런 다음 전화합니다 checkstyle
이와 같은 개미 작업 :
<checkstyle config="${scm.dir}/checkstyle_checks.xml"
properties="${scm.dir}/checkstyle.properties">
<!-- details elided -->
</checkstyle>
에 대한 호출 checkstyle
작업에 포함 된 키/값 쌍이 주입됩니다. checkstyle.properties
메인 체크 스타일 구성에 파일을 파일로 파일을 파일하십시오.
원한다면 전체 스크립트를 볼 수 있습니다. 여기
도움이 되었기를 바랍니다
다른 팁
Eclipse에서 나는 추가 속성을 추가 할 필요가없는 다음을 넣었습니다.
<module name="SuppressionFilter">
<property name="file" value="${samedir}/suppressions.xml"/>
</module>
나는 디렉토리의 절대적인 경로를 얻는다 build.xml
사용합니다 ant.file
변수 및 프로젝트 이름 :
<project name="common" ... >
<dirname property="thisdir" file="${ant.file.common}"/>
그런 다음 CheckStyle 구성 파일에 대한 절대 경로를 연결할 수 있습니다.
checkstyle.suppressions.file=${thisdir}/qclib/checkstyle-suppressions.xml
이후 thisdir
가변은 개미에서 나오고 경로 분리기 변환이 필요하지 않은 것 같습니다.
Eclipse로 작업하고 있으며 외부 CheckStyle 구성과 동일한 디렉토리에 억제 파일이있는 경우 다음과 같은 억제 필터를 설정할 수 있습니다.
<module name="SuppressionFilter">
<property name="file" value="${config_dir}/my_suppressions.xml"/>
</module>
또한 CheckStyle 구성에서 $ {config_dir} 속성을 정의해야합니다.
Eclipse Preverences-> "CheckStyle" -> CS 구성 -> "속성 .." -> "추가 속성 .."
CheckStyle Config dir의 속성 정의 :
config_dir ---> ${config_loc}
Robert의 답변이 쉬운 솔루션으로 확장 될 수 있다고 생각합니다. 개미와 일식:
다음과 같이 구성 XML 안에 억제 파일을 포함시킵니다.
<module name="SuppressionFilter">
<property name="file" value="${samedir}/suppressions.xml"/>
</module>
이제 Eclipse가 만족하고 파일을 찾습니다.
개미가 작업을 수행하려면 목표를 이와 같은 것으로 업데이트하십시오.
<checkstyle config="${checkstyle.config}/checkstyle-checks.xml">
<!-- ... -->
<property key="samedir" value="${checkstyle.config}"/>
</checkstyle>
도움이 되었기를 바랍니다.
CheckStyle 4.26.0이므로 구성 파일에서 사전 정의 된 상수를 사용할 수 있습니다.
(https://github.com/jshiell/checkstyle-idea/issues/217) :
- $ {basedir} & $ {project_loc} - 현재 프로젝트 디렉토리에 매핑됩니다.
- $ {workspace_loc} - 현재 Eclipse Workspace 디렉토리에 매핑됩니다.
- $ {config_loc} & $ {samedir} - 구성 파일이
Maven과 구성을 공유하려면 "PropertyExpansion"구성 요소를 사용하여 POM 구성 (보고 섹션)의 "Eclipse 상수"를 "별칭"해야합니다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<configLocation>${project.basedir}/quality/checkstyle/dap_checkstyle_checks.xml</configLocation>
<propertyExpansion>basedir=${project.basedir}</propertyExpansion>
</configuration>
<reportSets>
<reportSet>
<reports>
<report>checkstyle</report>
</reports>
</reportSet>
</reportSets>
</plugin>
"Propertyexpansion"은 다음에서 영감을 얻습니다. https://github.com/checkstyle/checkstyle/blob/master/pom.xml#l582.