2009-10-06 11 views

Antwort

4

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> 
+2

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

+0

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

0

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.