[英]Building effective model with DefaultModelBuilder . build()
I'm trying to get a effective model for a project and currently under the Maven Core API 3.0.3 (or 3.0.4) there's this method called build() which is neat BUT..我正在尝试为一个项目获得一个有效的模型,目前在 Maven Core API 3.0.3(或 3.0.4)下有一个名为 build() 的方法,它很简洁但是..
it requires too much like ModelNormalizer, ProfileInjector etc for it not to throw null pointer exception while building.它需要太多像 ModelNormalizer、ProfileInjector 等,才能在构建时不抛出空指针异常。 There's so much things that need initialization before I can build the effective model and all the information I have is a filepath to the pom.xml
在我构建有效模型之前需要初始化的东西太多了,我拥有的所有信息都是 pom.xml 的文件路径
Anyone has work this out?有没有人解决过这个问题?
Here is sample code:这是示例代码:
DefaultModelBuilder modelBuilder = new DefaultModelBuilderFactory().newInstance();
ModelBuildingRequest req = new DefaultModelBuildingRequest();
req.setProcessPlugins(false);
req.setPomFile(file);
req.setValidationLevel(ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL);
req.setModelResolver(new MyLocalModelResolver());
Model model = modelBuilder.build(req).getEffectiveModel();
Yes it works for me.是的,它对我有用。 I have to set all data with default values.
我必须使用默认值设置所有数据。 Very annoying...
很烦人...
I have created a MavenModelBuilder builder class for that我为此创建了一个 MavenModelBuilder 构建器类
/**
* Default MavenModelBuilder.
*/
public class MavenModelBuilder extends DefaultModelBuilder {
/**
* Constructor
*/
public MavenModelBuilder() {
super();
ModelProcessor modelProcessor = new DefaultModelProcessor()
.setModelLocator(new DefaultModelLocator())
.setModelReader(new DefaultModelReader());
ModelInterpolator modelInterpolator = new StringSearchModelInterpolator()
.setPathTranslator(new DefaultPathTranslator())
.setUrlNormalizer(new DefaultUrlNormalizer());
setProfileSelector(new DefaultProfileSelector());
setModelProcessor(modelProcessor);
setModelValidator(new DefaultModelValidator());
setSuperPomProvider(new DefaultSuperPomProvider().setModelProcessor(modelProcessor));
setModelNormalizer(new DefaultModelNormalizer());
setInheritanceAssembler(new DefaultInheritanceAssembler());
setModelInterpolator(modelInterpolator);
setModelUrlNormalizer(new DefaultModelUrlNormalizer().setUrlNormalizer(new DefaultUrlNormalizer()));
setModelPathTranslator(new DefaultModelPathTranslator().setPathTranslator(new DefaultPathTranslator()));
setPluginManagementInjector(new DefaultPluginManagementInjector());
setLifecycleBindingsInjector(new DefaultLifecycleBindingsInjector());
setDependencyManagementInjector(new DefaultDependencyManagementInjector());
setReportConfigurationExpander(new DefaultReportConfigurationExpander());
setReportingConverter(new DefaultReportingConverter());
setPluginConfigurationExpander(new DefaultPluginConfigurationExpander());
setDependencyManagementImporter(new DefaultDependencyManagementImporter());
setProfileInjector(new DefaultProfileInjector());
}
}
And i call it like this我这样称呼它
/**
* Parse the xml file to get the model of the xml file.
*
* @param path of the project
* @throws IllegalArgumentException : exception
*/
public static Model parseFile(String path) throws IllegalArgumentException {
DefaultModelBuilder builder = new MavenModelBuilder();
ModelBuildingRequest req = new DefaultModelBuildingRequest();
req.setProcessPlugins(false);
req.setPomFile(new File(path));
req.setValidationLevel(ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL);
Model model = null;
try {
model = builder.build(req).getEffectiveModel();
} catch (ModelBuildingException e) {
e.printStackTrace();
}
return model;
}
Maybe this library can help: https://github.com/jenkinsci/lib-jenkins-maven-embedder也许这个库可以提供帮助: https : //github.com/jenkinsci/lib-jenkins-maven-embedder
Or at least as a sample.或者至少作为一个样本。
Olivier奥利维尔
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.