Сбой плагина Maven и открытие проблемы, я хотел бы объяснить внутри, как может появиться обнаруженное исключение NullPointerException

#java #nullpointerexception

#java #исключение nullpointerexception

Вопрос:

При компиляции проекта с открытым исходным кодом я столкнулся с проблемой с Maven плагином, который выходит из строя.
И я хотел бы открыть вопрос о его проблеме. Чтобы быть полезным для тех, кто будет искать его решение, я хотел бы объяснить, как это может произойти.

 Execution default of goal pl.project13.maven:git-commit-id-plugin:4.0.3:revision failed. (pl.project13.maven:git-commit-id-plugin:4.0.3:revision:default:initialize)

org.apache.maven.plugin.PluginExecutionException: Execution default of goal pl.project13.maven:git-commit-id-plugin:4.0.3:revision failed.
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:148)
    at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:332)
    at org.eclipse.m2e.core.internal.embedder.MavenImpl.lambda$8(MavenImpl.java:1380)
    at [...]
Caused by: java.lang.NullPointerException
    at pl.project13.maven.git.GitCommitIdMojo.execute(GitCommitIdMojo.java:441)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
    ... 30 more
 

Для этого я выделил красным соответствующую строку, которая вызывает NullPointerException в его репозитории Git.
Содержимое строки 441 GitCommitIdMojo.java :

 List<MavenProject> sortedProjects =
   Optional.ofNullable(session.getProjectDependencyGraph())
       .map(graph -> graph.getSortedProjects())
       .orElseGet(() -> {
          log.warn("Maven's dependency graph is null. Assuming project is the only one executed.");
          return Collections.singletonList(session.getCurrentProject());
       });
 

Но я не настолько опытен в необязательных и других встроенных функциях. И мне интересно, откуда это происходит на самом NullPointerException деле. У меня нет возможности протестировать его в реальном времени, поэтому я могу только догадываться.

  1. Я проверил исходный файл: session является обязательным атрибутом. Оно не должно быть null.
  2. Я считаю, что Optional.ofNullable(...) защищает содержимое внутри круглых скобок и что NullPointerException это происходит не отсюда.
  3. Но при вводе .orElseGet(...) части выражения может произойти сбой Collections.singletonList(session.getCurrentProject()) , когда session.getCurrentProject() будет возвращено значение null.

Я прав?
Какие другие части этого утверждения могут привести к a NullPointerException при каких условиях?

Ответ №1:

Вы не смотрите на правильную версию кода. Ошибка maven относится к 4.0.3 git-commit-id-plugin, но отображаемый вами код поступает из ветки master, которая находится на 4.0.4-SNAPSHOT .

Это строка 441 в версии 4.0.3:

Список sortedProjects = session.getProjectDependencyGraph().getSortedProjects();

Указатель NullPointer может исходить из любой из трех частей.

Комментарии:

1. Спасибо! Я не смог найти эту 4.0.3 ветку в ее интерфейсе Git и предположил (ошибочно!), Что master она не изменилась. Я иду посмотреть, существует ли та же строка master .

2. Хорошо, оно изменилось между 4.0.3 и 4.0.4 в том, что, безусловно, является исправлением моей проблемы. Итак, проблемы больше нет.