我创建了一个HelloWorld hibernate应用程序(hibernate.cfg.xml +一个POJO类+一个主类来保存数据库中的pojo类对象)。对于这个 - 我用必需的Hibernate jar创建了用户库并将其添加到项目中,但是出于某种原因,在创建我的自定义用户Hibernate库时,我检查了“System Library(添加到引导类路径)”复选框。
我试图运行该应用程序并获得
Exception in thread "main" java.lang.ExceptionInInitializerError
at org.hibernate.cfg.Configuration.reset(Configuration.java:309)
at org.hibernate.cfg.Configuration.<init>(Configuration.java:275)
at org.hibernate.cfg.Configuration.<init>(Configuration.java:279)
at com.woworks.secondhibernate.main.HibernateTest.main(HibernateTest.java:22)
Caused by: java.lang.NullPointerException
at org.hibernate.internal.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:170)
at org.hibernate.cfg.Environment.<clinit>(Environment.java:220)
... 4 more
如果我取消选中“系统库(添加到引导类路径)” - 一切正常。有人可以解释为什么会发生这种情况,以及“系统库(添加到引导类路径)”
的目的是什么谢谢!
答案 0 :(得分:1)
引导类路径用于运行和提供java。例如,javac(编译器)在引导类路径中使用java类来编译代码。当javac解析编译类所需的引用时(例如:代码中引用的hibernate对象),它将使用编译类路径。
这同样适用于运行java应用程序。引导类路径(或系统类路径)类对运行时可见,但对用户应用程序不可见。
有关详细信息http://docs.oracle.com/javase/7/docs/technotes/tools/findingclasses.html
,请参阅此文档答案 1 :(得分:1)
当JAR添加到引导类路径时,它们具有与应用程序类路径上的JAR不同的上下文。我怀疑将Hibernate放在引导类路径上会导致它出现问题,因为它试图从它的类路径加载一些配置资源,但该资源仅在app类路径上可用。关键是引导类路径上的任何类都不知道,也不能引用应用程序类路径中的任何内容。