繁体   English   中英

使用 DefaultModelBuilder 构建有效模型。 建造()

[英]Building effective model with DefaultModelBuilder . build()

我正在尝试为一个项目获得一个有效的模型,目前在 Maven Core API 3.0.3(或 3.0.4)下有一个名为 build() 的方法,它很简洁但是..

它需要太多像 ModelNormalizer、ProfileInjector 等,才能在构建时不抛出空指针异常。 在我构建有效模型之前需要初始化的东西太多了,我拥有的所有信息都是 pom.xml 的文件路径

有没有人解决过这个问题?

这是示例代码:

    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();

是的,它对我有用。 我必须使用默认值设置所有数据。 很烦人...

我为此创建了一个 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());
  }

}

我这样称呼它

  /**
   * 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;
  }

也许这个库可以提供帮助: https : //github.com/jenkinsci/lib-jenkins-maven-embedder

或者至少作为一个样本。

奥利维尔

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM