Mavenビルド中にDTDまたはXSDスキーマに対してXMLドキュメントを検証するにはどうすればよいですか?
3 に答える
xml-maven-pluginの検証目標は、整形式かどうかをチェックし、オプションでスキーマに対して検証します。検証が失敗すると、ビルドは失敗します。
プラグインはレポートを作成しません。興味のあるレポートに何が必要ですか? 無効なファイルに関する情報?
使用例を次に示します。
<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/xml</dir>
<systemId>src/main/xmlschema.xsd</systemId>
</validationSet>
</validationSets>
</configuration>
</plugin>
XMLファイルがXMLスキーマと一致しているかどうかを確認できるxml-maven-pluginがありますが、レポートを生成できるとは思いません。
私はしばらくの間xml-maven-pluginを使用してきました (これを紹介してくれたPascal ThiventとRick Sellerに感謝します) が、いくつか問題がありました。
XML ドキュメントを検証していました。ある時点で、XML ドキュメントを 2 つのファイルに分割し、両方とも独自のサブディレクトリに配置します。その時点で、ファイルが移動されたため、xml-maven-plugin は何も検証しませんでしたが、それについても文句を言いませんでした。また、個人的には、構成が直感的すぎず、予想外の場合はデバッグが少し難しいと感じました。
そのため、 maven-antrun-pluginと組み合わせたschemavalidate Ant タスクを再発見できてうれしかったです。必要なことはすべてやった。
以下の例では、ファイルが実際に選択されていることを確認しています。もちろん、これを特定のニーズに合わせて調整することもできます。おまけとして (トピックから少し外れていますが)、依存関係としてダウンロードされた 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>
確かに、これは Maven の作業方法には実際には適合しませんが、私にとってはうまくいき、このオプションを知ることで他の誰かが助けられるかもしれません。