java - 一个Maven插件失败并打开一个问题,我想解释一下遇到的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());
});
但我对 Optional 和其他内联函数的经验并不丰富。我想知道NullPointerException
真正来自哪里。我没有办法在 Live 中测试它,所以我只能猜测。
我已经检查了源文件:
session
是必需的属性。它不应该为空。我相信
Optional.ofNullable(...)
保护括号内的内容并且NullPointerException
不是来自这里。但是当输入
.orElseGet(...)
表达式的一部分时,它可能会在返回 null的Collections.singletonList(session.getCurrentProject())
地方失败。session.getCurrentProject()
我对吗?
该语句的其他哪些部分可能NullPointerException
在什么条件下导致?
解决方案
您没有查看正确版本的代码。maven-error 指的是 git-commit-id-plugin 的 4.0.3,但您显示的代码来自 master 分支,位于 4.0.4-SNAPSHOT。
列出 sortedProjects = session.getProjectDependencyGraph().getSortedProjects();
NullPointer 可以来自三个部分中的任何一个。
推荐阅读
- python - 仅包含 5 个元音中的每一个的函数
- javascript - 如何确定为什么超链接不起作用?
- statistics - 计算两个叠加的高斯函数的质心
- fosuserbundle - HWIOAuth Symfony 4:服务定义必须是以“@”开头的数组或字符串,但为服务找到字符串
- c# - RouteCreationException:属性路由信息出现以下错误
- javascript - 如何在不链接和嵌套一堆 Promise 的情况下编写 async/await 代码?
- raspberry-pi - vl53l0x 与 android 的东西
- angular - 停止 ng-serve 的命令
- c# - 在 C# 中的 ImageListView 上的 Foreach
- c# - 俄罗斯方块轮换问题