简体   繁体   English

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

[英]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.或者至少作为一个样本。

hth

Olivier奥利维尔

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

相关问题 如何以编程方式构建pom文件的有效模型? - How to programmatically build the effective model of a pom file? Maven生成源“在构建有效模型时遇到了一些问题” - Maven generate-sources “Some problems were encountered while building the effective model for ” 这是优化我的网络模型的更有效方法吗? - Is this a more effective way to optimize my networking model? 从Eclipse Project到Hudson Build的最有效方法 - Most effective way to go from Eclipse Project to Hudson Build 从Java中的多个字符串构建令牌列表的有效方法 - Effective way to build a list of tokens from multiple strings in Java 内置库可对100GB文件进行有效搜索 - Build in library's to perform effective searching on 100GB files 使用ant构建:动态构建选项? - Building with ant : dynamic build options? 通过build.xml构建目标时出错 - Error with target in building by build.xml 使用build.sh脚本进行Android构建 - Android building using build.sh script 构建一个eclipse插件。 我可以扩展什么依赖项和哪个类来在项目的 Java 和 Effective pom 文件中实现警告标志? - Building an eclipse plugin. What dependency and which class could I extend to implement warning signs in Java and Effective pom files for a project?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM