org.springframework.data.mongodb.core.convert.DefaultDbRefResolver。<c linit>(DefaultDbRefResolver.java:57)上的NullpointerException

min*_*ime 2 java nullpointerexception maven spring-data-mongodb

我一直在寻找该异常的答案,但在任何地方都找不到,因此,我将在此处保留此帖子以供将来参考。因此,如果有人遇到此问题,欢迎您。

我正在使用maven shade plugin一起创建可运行的jarorg.springframework.data:spring-data-mongodb:1.4.0.RELEASE

创建jar并运行后,我遇到了标题中的异常 java -jar Foo-0.0.1-SNAPSHOT.jar

min*_*ime 5

答案是:

错误在这里:https : //github.com/spring-projects/spring-data-mongodb/blob/master/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert /DefaultDbRefResolver.java 在这一行:

private static final boolean IS_SPRING_4_OR_BETTER = SpringVersion.getVersion().startsWith("4");
Run Code Online (Sandbox Code Playgroud)

SpringVersion.getVersion如果无法从包中检索版本号,则返回null。由于依赖项是在有阴影的jar中提取的,因此没有软件包可以从中检索版本号并.startsWith("4")抛出NullPointerException

要解决此问题(这是一种快速而肮脏的解决方案,但它可以工作),请org.springframework.core在您的源文件夹中创建一个包并创建以下类(我正在使用4.0.2-RELEASE版本中的springframework):

package org.springframework.core;

/**
 * for spring data mongodb
 * it can't determine the springversion in the shaded jar
 */
public class SpringVersion {
    public static String getVersion() {
        return "4.0.2-RELEASE";
    }

}
Run Code Online (Sandbox Code Playgroud)

该类将覆盖原始的SpringVersion类文件。