Построение эффективной модели с DefaultModelBuilder. строить () - PullRequest
0 голосов
/ 17 января 2012

Я пытаюсь получить эффективную модель для проекта, и в настоящее время в Maven Core API 3.0.3 (или 3.0.4) есть этот метод, называемый build (), который аккуратен, НО ..

требуется слишком много, как ModelNormalizer, ProfileInjector и т. Д., Чтобы он не генерировал исключение нулевого указателя при сборке. Есть так много вещей, которые нужно инициализировать, прежде чем я смогу построить эффективную модель, и вся информация, которую я имею, - это путь к файлу pom.xml

У кого-нибудь есть это?

Ответы [ 3 ]

1 голос
/ 03 февраля 2018

Вот пример кода:

    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();
0 голосов
/ 22 января 2016

Да, это работает для меня. Я должен установить все данные со значениями по умолчанию. Очень раздражает ...

Для этого я создал класс строителя 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;
  }
0 голосов
/ 17 января 2012

Может быть, эта библиотека может помочь: https://github.com/jenkinsci/lib-jenkins-maven-embedder

Или хотя бы в качестве образца.

hth

Оливье

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...