#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
деле. У меня нет возможности протестировать его в реальном времени, поэтому я могу только догадываться.
- Я проверил исходный файл:
session
является обязательным атрибутом. Оно не должно быть null. - Я считаю, что
Optional.ofNullable(...)
защищает содержимое внутри круглых скобок и чтоNullPointerException
это происходит не отсюда. - Но при вводе
.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
в том, что, безусловно, является исправлением моей проблемы. Итак, проблемы больше нет.