我正在尝试使用 XMLUnit 获取两个 Maven POM 文件的差异。首先我的代码:
package com.company.control.cfgmgnt.tools.pommerge.core.internal.xml.comparison;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.custommonkey.xmlunit.DetailedDiff;
import org.custommonkey.xmlunit.Difference;
import org.custommonkey.xmlunit.DifferenceConstants;
import org.custommonkey.xmlunit.XMLTestCase;
import org.custommonkey.xmlunit.XMLUnit;
import org.custommonkey.xmlunit.examples.RecursiveElementNameAndTextQualifier;
import com.company.control.cfgmgnt.tools.pommerge.core.internal.xml.DocumentReader;
public class ComparisonTask extends XMLTestCase
{
public List<Difference> testAllDifferences( final File f1, final File f2, final boolean includeComments )
throws Exception {
XMLUnit.setIgnoreComments( !includeComments );
XMLUnit.setIgnoreWhitespace( true );
String myControlXML = DocumentReader.readXMLfile2String( f1 );
String myTestXML = DocumentReader.readXMLfile2String( f2 );
DetailedDiff myDiff = new DetailedDiff( compareXML( myControlXML, myTestXML ) );
myDiff.overrideElementQualifier( new RecursiveElementNameAndTextQualifier() );
List<Difference> _out = cleanDifferenceOutput( myDiff.getAllDifferences() );
return _out;
}
private static List<Difference> cleanDifferenceOutput( final List<Difference> list ) {
ArrayList<Difference> out = new ArrayList<Difference>();
for ( Difference dif : list ) {
if ( ( dif.getId() == DifferenceConstants.CHILD_NODE_NOT_FOUND_ID )
|| ( dif.getId() == DifferenceConstants.TEXT_VALUE_ID ) ) {
out.add( dif );
}
}
return out;
}
}
这里是控制POM:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>phoenix-parent</artifactId>
<groupId>com.company.phoenix</groupId>
<version>1.24.0-control-java7-SNAPSHOT</version>
</parent>
<groupId>com.company.control.project</groupId>
<artifactId>project</artifactId>
<version>1.0.0-control-java7-SNAPSHOT</version>
<packaging>pom</packaging>
<developers>
<developer>
<!-- user id of the responsible person (used for email) -->
<id>xyyyyy</id>
<!-- display name of responsible person -->
<name>xxxxx yyyyy</name>
<roles>
<role>projectmanager</role>
</roles>
<properties>
<!-- end date of this project, it will be automatically removed afterwards -->
<estimatedProjectEndDate>2014/01/08</estimatedProjectEndDate>
</properties>
</developer>
</developers>
<scm>
<connection>scm:svn:http://svn.company.com/phoenix/svn/phoenix/projects/feature/control-java7/trunk</connection>
<developerConnection>scm:svn:http://svn.company.com/phoenix/svn/phoenix/projects/feature/control-java7/trunk</developerConnection>
<url><![CDATA[http://svn.company.com/phoenix/svn/phoenix/projects/feature/control-java7/]]></url>
</scm>
<issueManagement>
<system>JIRA</system>
<url>http://jira.company.com/browse/TFWK</url>
</issueManagement>
...和测试POM:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>parent</artifactId>
<groupId>com.company</groupId>
<version>1.24.2-SNAPSHOT</version>
<relativePath>./parent/pom.xml</relativePath>
</parent>
<groupId>com.company.control.project</groupId>
<artifactId>project</artifactId>
<version>1.1.5-SNAPSHOT</version>
<packaging>pom</packaging>
<description>project aggregator for project.stabletrunk</description>
<issueManagement>
<system>JIRA</system>
<url>http://jira.company.com/browse/</url>
</issueManagement>
<distributionManagement>
<site>
<id>maven-sites</id>
<name>repository for Maven Websites</name>
<url>scp://phoenix-sites.company.com/maven-sites/projects/stableTrunk/${project.version}/</url>
</site>
</distributionManagement>
<properties>
<sonar.branch>${project.artifactId}</sonar.branch>
<sonar.host.url>http://phoenix-sonar.company.com</sonar.host.url>
</properties>
当我打印出差异的 XPath 时,这是我得到的控制/测试对:
/project[1]/parent[1]/artifactId[1]/text()[1]
/project[1]/parent[1]/artifactId[1]/text()[1]
/project[1]/parent[1]/groupId[1]/text()[1]
/project[1]/parent[1]/groupId[1]/text()[1]
/project[1]/parent[1]/version[1]/text()[1]
/project[1]/parent[1]/version[1]/text()[1]
null
/project[1]/parent[1]/relativePath[1]
/project[1]/version[1]/text()[1]
/project[1]/version[1]/text()[1]
/project[1]/developers[1]/developer[1]/id[1]
null
/project[1]/developers[1]/developer[1]/name[1]
null
/project[1]/developers[1]/developer[1]/roles[1]
null
/project[1]/developers[1]/developer[1]/properties[1]
null
/project[1]/scm[1]/connection[1]/text()[1]
/project[1]/issueManagement[1]/system[1]/text()[1]
/project[1]/scm[1]/developerConnection[1]/text()[1]
/project[1]/issueManagement[1]/url[1]/text()[1]
/project[1]/scm[1]/url[1]
null
null
/project[1]/distributionManagement[1]/site[1]/id[1]/text()[1]
null
/project[1]/distributionManagement[1]/site[1]/name[1]
null
/project[1]/distributionManagement[1]/site[1]/url[1]
/project[1]/issueManagement[1]/url[1]
null
null
/project[1]/properties[1]
现在我的问题是:为什么元素“issueManagement”不匹配?它在两个 POM 中...