我在一个项目中面临注释/持久性错误,持久性库抛出了
NullPointerException when trying to resolve the entities (org.eclipse.persistence.internal.jpa.metadata.accessors.classes.EntityAccessor.discoverMappedSuperclassesAndInheritanceParents(EntityAccessor.java:224)).
我如何调试这样的错误,以找到更多关于错误的原因?
在EntityAccessor
中设置断点并编译为调试不起作用,编译器本身似乎没有在调试模式下运行。
我正在使用Netbeans/Java/Maven
根据我的理解,您希望在编译中进行调试-而不是在调试模式下进行maven。
使用mvn编译,通过以下方式使用调试模式
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>8</source>
<target>8</target>
<debug>true</debug>
<debuglevel>lines,vars,source</debuglevel>
</configuration>
</plugin>
debuglevel可以是在CSV格式中输入的三个值中的任意一个为了突出显示,debug和debuglevel是maven中包含的重要节点。
希望能有所帮助。
参考:maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html
您可以在NetBeans中调试任何Maven目标到/Project Properties/Actions/
,选择您想要调试的目标,在最后一个选项设置属性选择添加,然后选择 debug Maven构建
您需要设置jpda.listen=maven
属性。
在Netbeans 8+:
1。选择构建时要调试的模块。
2。右键打开上下文菜单,选择Properties
。
3。选择Actions
类别。
4。然后选择Clean and build project
动作
5。在Set Properties
部分下,选择Add
> Debug Maven Build
。
6。点击OK
按钮关闭并保存您的设置。
现在您应该能够设置断点并调试maven插件和依赖项。
您是否在调试模式下运行Maven ?
要在调试模式下运行Maven,使用命令mvnDebug而不是mvn来构建您的项目,然后使用IDE附加到它。应该命中调试断点。
我已经在Eclipse中这样做了,主要是在尝试调试我自己的注释处理器时,但它对于调试Maven插件也很方便。
我想调试JPA处理器不会是微不足道的-您可能最好再次查看整个错误消息或将其张贴在您的问题中。
您需要在org.eclipse.persistence.internal.jpa.metadata.accessors.classes.EntityAccessor
类中设置断点,并且应该在服务器启动期间停止(您需要在调试模式下启动服务器)。这并不是真正的编译,而只是JPA从类注释中加载它的元数据。因为您的JPA提供程序的代码不是您可以轻松理解或修改的东西,我建议不要调试您尝试在网上搜索您的特定错误,看看是否有人经历过它(即可能是Eclipse Link上的错误),当您的实体没有正确注释时,这些库通常会抛出无信息异常,如空指针。