Getting ClassCastException for xerces class when importing Ant build script


(davidmichaelkarr) #1

I’m looking at modifying an existing Gradle build script. It currently tries to execute “ant” in order to run a target from a specific Ant build script. This appears to be platform-specific, and it fails on my Windows box. I’m attempting to convert it to the more portable (?) process of importing the build script and executing the desired converted task.

The first thing I did was just add the “ant.importBuild” statement just before the existing target, and ran that. This fails with the following root cause:

Caused by: java.lang.ClassCastException: org.apache.xerces.parsers.XIncludeAwareParserConfiguration cannot be cast to org.apache.xerces.xni.parser.XMLParserConfiguration
 at org.apache.xerces.parsers.SAXParser.<init>(Unknown Source)
 at org.apache.xerces.parsers.SAXParser.<init>(Unknown Source)
 at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.<init>(Unknown Source)
 at org.apache.xerces.jaxp.SAXParserImpl.<init>(Unknown Source)
 at org.apache.xerces.jaxp.SAXParserFactoryImpl.newSAXParser(Unknown Source)
 at org.apache.tools.ant.util.JAXPUtils.newSAXParser(JAXPUtils.java:215)
 at org.apache.tools.ant.util.JAXPUtils.getNamespaceXMLReader(JAXPUtils.java:172)
 at org.apache.tools.ant.helper.ProjectHelper2.parse(ProjectHelper2.java:244)
 at org.apache.tools.ant.helper.ProjectHelper2.parse(ProjectHelper2.java:177)
 at org.apache.tools.ant.ProjectHelper.configureProject(ProjectHelper.java:93)
 at org.apache.tools.ant.ProjectHelper$configureProject.call(Unknown Source)
 at org.gradle.api.internal.project.DefaultAntBuilder.importBuild(DefaultAntBuilder.groovy:76)

From the related occurrences of this on the web, it’s clear there’s a classpath conflict (that didn’t tell me anything that wasn’t obvious), but I don’t know how to resolve this.

The build scripts in question are from the Mockito code base (https://github.com/mockito/mockito), so you can see them there. I only added “ant.importBuild ‘build-ant.xml’” just before the place where the Ant target is executed.