Wie kann ich XML-Dokumente während eines Maven-Builds gegen eine DTD oder ein XSD-Schema validieren?XML-DTD/Schema-Validierung in Maven
Antwort
Es gibt eine xml-maven-plugin, die überprüfen kann, ob XML-Dateien matching an XML schema sind, aber ich denke nicht, dass es Berichte generieren kann.
Die validate goal des xml-maven-plugin wird auf Wohlgeformtheit prüfen und optional gegen ein Schema validieren. Der Build schlägt fehl, wenn die Validierung fehlschlägt.
Das Plugin produziert keinen Bericht, was möchten Sie in einem Bericht aus Interesse haben? Informationen über die ungültigen Dateien? Hier
ist ein Beispiel für die Verwendung:
<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>
Ich habe die xml-maven-plugin seit einiger Zeit verwendet wird (dank Pascal Thivent und Rick Seller für mich diese Einführung), hatte aber einige Probleme mit ihm.
Ich validierte ein XML-Dokument. Zu einem bestimmten Zeitpunkt teilen wir das XML-Dokument in zwei Dateien, beide in einem eigenen Unterverzeichnis. An diesem Punkt hat das xml-maven-plugin nicht mehr validiert, weil die Datei verschoben wurde, aber auch nicht darüber geklagt. Auch persönlich fand ich die Konfiguration nicht zu intuitiv und ein bisschen schwer zu debuggen, wenn es nicht erwartet wird.
Also für mich war ich glücklich, die schemavalidate Ant Aufgabe kombiniert mit der maven-antrun-plugin wieder zu entdecken. Hab alles was ich brauchte und mehr.
Im folgenden Beispiel überprüfe ich, dass Dateien tatsächlich ausgewählt sind. Natürlich können Sie dies für Ihre spezifischen Bedürfnisse anpassen. Als Bonus (zäh ein bisschen abseits vom Thema) ein Beispiel dafür, wie ich den Pfad eines xsd, der als Abhängigkeit heruntergeladen wird, ergreife.
<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>
Zugegeben, das paßt nicht wirklich in der Maven-Art zu arbeiten, aber es funktionierte für mich und vielleicht jemand anderes durch das Wissen, diese Option geholfen wird.
- 1. Maven oder nicht zu Maven
- 2. Testen Clojure in Maven
- 3. Ohne Abhängigkeit in maven
- 4. java_home in Maven
- 5. ClassNotFoundException in Maven Projekt
- 6. java.lang.NoClassDefFoundError: in Eclipse Maven
- 7. Code-Generierung in Maven
- 8. Inter Projektabhängigkeiten in Maven
- 9. Ejb3 Abhängigkeit in Maven
- 10. Maven: In Abhängigkeiten lokalen
- 11. Abhängigkeiten in Maven übernehmen
- 12. Maven-Site in Gradle
- 13. Versionspropagierung in Maven
- 14. Übergeben von Systemvariablen mit Maven-Surefire-Plugin in Maven
- 15. Maven - pass Argument in exec-maven-plugin verwenden
- 16. Maven Fehler mit mehreren Hinrichtungen in Maven-deploy-Plugin
- 17. Java - NoClassDefFoundError in gemischten Maven und nicht Maven Projekte
- 18. Maven antrun: pass Maven Eigenschaften Ameise
- 19. Unterschied zwischen Maven bauen und Maven installieren
- 20. Parsing maven pom.xml, mit maven jar
- 21. Maven Versionen-Maven-Plugin-Versionen Plugin 2.2
- 22. Maven Ressourcen und Docker-Maven-Plugin
- 23. Maven-Fehler: „Aktualisieren von Maven Projekt“
- 24. Maven Maven-deploy-Plugin lädt immer zweimal
- 25. Maven maven-exec-plugin mehrere Ausführungskonfigurationen
- 26. log4j.properties in mehreren Maven-Modulen?
- 27. Mehrere antrun Aufgaben in maven
- 28. JUnit Ausgabe in Maven berichtet
- 29. Abhängigkeitsinformationen für org.springframework.transaction in maven
- 30. Line-Separator in Maven einrichten
Ja, validation error reports wird helfen, mögliche Fehler in XML-Dateien wie PMD oder Findbug für Java-Code. Ich habe bemerkt, dass viele Entwickler XML- oder JSP-Validierungsfehler/-warnungen überspringen, während sie mit dem Projekt arbeiten, was potentielle Laufzeitfehler verursachen kann. – cetnar
Einverstanden. Nicht so nützlich, um nur den Build zu stolpern, aber den Build fehlzuschlagen und den Schema-Validierungsfehler zu drucken ... jetzt ist das sehr nützlich. Vor allem, wenn Sie nur IDEs verwenden, wenn Sie etwas debuggen müssen. – avgvstvs