문제

체크 스타일 억제 필터 설정이 있습니다 (예 : 단위 테스트 코드에서 마법 번호를 무시합니다).

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.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top