Maven 빌드 중에 XML 문서를 DTD 또는 XSD 스키마에 대해 유효성을 검사하려면 어떻게해야합니까?Maven의 XML DTD/스키마 유효성 확인
답변
XML 파일이 matching an XML schema인지 여부를 확인할 수있는 xml-maven-plugin이 있지만 보고서를 생성 할 수 있다고 생각하지 않습니다.
xml-maven-plugin의 validate goal은 형식이 올바른지 확인하고 선택적으로 스키마에 대해 유효성을 검사합니다. 유효성 검사가 실패하면 빌드가 실패합니다.
플러그인에서 보고서를 생성하지 않으므로 관심있는 보고서에서 원하는 것은 무엇입니까? 잘못된 파일에 대한 정보? 여기
은 사용 예입니다 :<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>xml-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>validate</goal>
</goals>
</execution>
</executions>
<configuration>
<validationSets>
<validationSet>
<dir>src/main/xsd</dir>
<systemId>src/main/xmlschema.xml</systemId>
</validationSet>
</validationSets>
</configuration>
</plugin>
I (이 저를 도입 Pascal Thivent 및 Rick Seller 덕분에) 약간의 시간에 대한 xml-maven-plugin를 사용하고 있지만, 몇 가지 문제가 있었다.
XML 문서의 유효성을 검사하고있었습니다. 어떤 시점에서 우리는 XML 문서를 두 개의 파일로 나누었습니다. 둘 다 자신의 하위 디렉토리에 있습니다. 이 시점에서 xml-maven-plugin은 파일이 이동 되었기 때문에 더 이상 유효성을 검사하지 못했지만 불만을 제기하지 않았습니다. 또한 개인적으로 너무 직관적 인 구성을 찾지 못했고 예상치 못한 경우 디버깅하기가 어려웠습니다.
나를 위해 maven-antrun-plugin과 결합 된 schemavalidate 개미 작업을 재발견하게되어 기뻤습니다. 내가 필요한 것 이상을 다 했어.
아래 예제에서는 파일이 실제로 선택되어 있는지 확인합니다. 물론 원하는대로 맞춤식으로 조정할 수 있습니다. 보너스 (토픽에서 조금 힘든)로서 종속성으로 다운로드되는 xsd의 경로를 잡는 방법의 예.
<build>
<plugins>
<plugin><groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId><version>1.8</version>
<executions><execution>
<id>validate-xml-document-files-against-schema</id>
<phase>test</phase>
<goals><goal>run</goal></goals>
<configuration>
<target>
<copy file="${maven.dependency.com.mycompany.some-schema.xsd.path}" tofile="${xml-validation-dir}/some-schema.xsd" />
<resourcecount property="xml.count">
<fileset dir="${xml-validation-dir}" includes="**/*.xml" />
</resourcecount>
<fail message="fileset does not match any xml file (use same fileset for actual validation)">
<condition><equals arg1="${xml.count}" arg2="0" /></condition>
</fail>
<echo message="validating ${xml.count} xml files against some-schema" />
<schemavalidate>
<schema namespace="http://mycompany.com/some-namespace" file="${xml-validation-dir}/some-schema.xsd" />
<fileset dir="${xml-validation-dir}" includes="**/*.xml" />
</schemavalidate>
<echo message="all ${xml.count} xml documents are valid" />
</target>
</configuration>
</execution></executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>some-schema-artifact</artifactId>
<version>1.2.3</version>
<type>xsd</type>
</dependency>
</dependencies>
부여
이 정말 작업의 받는다는 방식으로 적합하지 않지만, 나를 위해 일한 및 다른 어쩌면 누군가가이 옵션을 알면 도움이된다.
예, 유효성 검사 오류 보고서는 Java 코드에서 PMD 또는 Findbug와 같은 xml 파일의 가능한 오류를 지적하는 데 도움이됩니다. 나는 많은 개발자들이 프로젝트로 작업하면서 XML 또는 JSP 유효성 검사 오류/경고를 무시하고 잠재적 인 런타임 오류를 유발할 수있는 것으로 나타났습니다. – cetnar
동의. 빌드를 실패하는 것만 큼 유용하지는 않지만 빌드를 실패하고 스키마 유효성 오류를 인쇄하는 것 ... 이제는 매우 유용합니다. 특히 당신이 뭔가를 디버깅 할 필요가있을 때만 IDE를 사용한다면. – avgvstvs