一个Maven plugin fails和open issue,我想在里面解释遇到的NullPointerException是怎么出现的
A Maven plugin fails and to open an issue, I would like to explain inside how the NullPointerException encountered can appear
在编译开源项目时,我遇到一个 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(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
为此,我在其 Git 存储库中将导致 NullPointerException
的相关行红色化。
GitCommitIdMojo.java
的 The content of the line 441 是:
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());
});
但我对 Optional 和其他内联函数不是很熟悉。我想知道 NullPointerException
真正来自哪里。 Live没法测试,所以只能猜测。
我检查了源文件:session
是必需的属性。它不应该为空。
我相信 Optional.ofNullable(...)
保护括号内的内容,NullPointerException
不是来自这里。
但是当输入表达式的 .orElseGet(...)
部分时,它可能会在 Collections.singletonList(session.getCurrentProject())
上失败,其中 session.getCurrentProject()
会 return null。
我说得对吗?
在什么情况下,此语句的其他哪些部分可能导致 NullPointerException
?
您查看的代码版本不正确。 maven-error 指的是 git-commit-id-plugin 的 4.0.3,但是您显示的代码来自 master 分支,位于 4.0.4-SNAPSHOT.
列出 sortedProjects = session.getProjectDependencyGraph().getSortedProjects();
NullPointer 可以来自这三个部分中的任何一个。
在编译开源项目时,我遇到一个 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(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
为此,我在其 Git 存储库中将导致 NullPointerException
的相关行红色化。
GitCommitIdMojo.java
的 The content of the line 441 是:
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());
});
但我对 Optional 和其他内联函数不是很熟悉。我想知道 NullPointerException
真正来自哪里。 Live没法测试,所以只能猜测。
我检查了源文件:
session
是必需的属性。它不应该为空。我相信
Optional.ofNullable(...)
保护括号内的内容,NullPointerException
不是来自这里。但是当输入表达式的
.orElseGet(...)
部分时,它可能会在Collections.singletonList(session.getCurrentProject())
上失败,其中session.getCurrentProject()
会 return null。
我说得对吗?
在什么情况下,此语句的其他哪些部分可能导致 NullPointerException
?
您查看的代码版本不正确。 maven-error 指的是 git-commit-id-plugin 的 4.0.3,但是您显示的代码来自 master 分支,位于 4.0.4-SNAPSHOT.
列出 sortedProjects = session.getProjectDependencyGraph().getSortedProjects();
NullPointer 可以来自这三个部分中的任何一个。