我正在开发一个简单的实用程序,用于验证开发人员添加到pom.xml中的内容。例如,可能存在一个限制,即所有依赖项版本必须由父pom管理,并且如果开发人员将版本标签添加到子项目之一的依赖项中,则实用程序应该捕获该依赖项。为此,我试图将pom.xml的内容加载到Maven模型类“ org.apache.maven.model.Model”中。但是,我收到此异常:
unexpected element (uri:"http://maven.apache.org/POM/4.0.0", local:"project"). Expected elements are (none)
添加自定义验证处理程序以忽略“意外元素”异常(实际上,始终返回true)无效。这是我的代码:
public static void main(String[] args) {
try {
unmarshalXMLToObject(new File("pom.xml"));
} catch (Exception e) {
e.printStackTrace();
}
}
public static Model unmarshalXMLToObject(File xmlFileToUnmarshal) throws JAXBException, SAXException, IOException,
ParserConfigurationException {
JAXBContext jaxbContext = JAXBContext.newInstance(Model.class);
Unmarshaller m = jaxbContext.createUnmarshaller();
m.setEventHandler(new ValidationEventHandler() {
@Override
public boolean handleEvent(ValidationEvent arg0) {
// return true always
return true;
}
});
@SuppressWarnings("unchecked")
Model objectToReturn = (Model) m.unmarshal(xmlFileToUnmarshal);
return objectToReturn;
}
我还尝试将maven-4.0.0.xsd添加到解组器中,但这也无济于事。
原来,我根本不需要使用JAXB解组。
下面的代码可以达到目的,至少是出于我想要的。
org.apache.maven.model.io.xpp3.MavenXpp3Reader mavenreader = new MavenXpp3Reader();
org.apache.maven.model.Model model = mavenreader.read(new FileReader(pomXml));
这样,我就拥有了完整的maven pom.xml作为java类。
我想标题中包含JAXB,并且标签使潜在的回答者无法回答这个问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句