GWT + IntelliJ Idea - 添加服务器端库
Posted
技术标签:
【中文标题】GWT + IntelliJ Idea - 添加服务器端库【英文标题】:GWT + IntelliJ Idea - adding a server side library 【发布时间】:2015-11-18 10:24:08 【问题描述】:我正在尝试在 IntelliJ Idea 15 中实现一个 GWT 项目。我对 GWT 及其 superdev 模式没有任何问题(至少很明显)——我可以运行一个应用程序并使用它。我可以进行 RPC 调用。
但是,现在我正在尝试添加 JPA/Hibernate 支持以使用数据库。在这里我遇到了麻烦。在项目中,我有一个 GWT 方面(2.6.1)、一个 JPA 方面(具有休眠实现)和一个 web 方面(用于 web dd)。使用Open Module Settings -> Libraries -> New Project Library
我已经添加了gwt-servlet.jar
,并使用了maven(它不是maven项目,只是使用了Idea的特性)库:c3p0:c3p0:0.9.1.2
,org.hibernate:hibernate-entitymanager:5.0.3.Final
,org.postgresql:postgresql:9.3-1101-jdbc41
;这就是配置。
使用此持久性单元属性(摘录):
<property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
<property name="hibernate.c3p0.min_size" value="5" />
<property name="hibernate.c3p0.max_size" value="20" />
<property name="hibernate.c3p0.timeout" value="300" />
<property name="hibernate.c3p0.max_statements" value="50" />
<property name="hibernate.c3p0.idle_test_period" value="3000" />
在 GWT RPC servlet 中,我尝试创建 EntityManager 实例:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("ThreatPersistenceUnit");
EntityManager em = emf.createEntityManager();
Query query = em.createQuery("SELECT a FROM Asset a");
...
但是当我尝试使用默认 GWT 运行配置 (Jetty) 在 IDEA 中运行它时,出现以下异常:
javax.persistence.PersistenceException: Unable to build entity manager factory
引起
Caused by: java.lang.ClassNotFoundException: Could not load requested class : org.postgresql.Driver
此外,在异常之前我收到以下警告: 警告:HHH000022:遇到 c3p0 属性,但在类路径上找不到 c3p0 提供程序类;这些属性将被忽略。
看来服务器看不到c3p0和postgre jdbc驱动。
我尝试用谷歌搜索,发现最接近的问题/解决方案是 SO answer。我已将库同时放入项目和工件中。但是,我不确定 Jetty lib 的回复是什么意思。如果我只使用 GWT 的默认服务器,我在哪里可以找到 Jetty 安装?
另外,对我来说似乎很奇怪的是,在我遇到 GWT RPC 的类似问题(我不记得它是否完全是 ClassNotFoundException)之前,我可以通过向库中添加 gwt-servlet.jar 来解决这个问题- 为什么添加这些其他库没有帮助?至少它似乎对休眠没有任何问题,因为它提供了警告等。
【问题讨论】:
【参考方案1】:好的,即使这是一个愚蠢的错误,也许在未来的某一天会有其他人会犯,所以为了将来参考,这就是问题所在:
我已将项目的 SDK 和源代码版本设置为 1.6; hibernate 和其他库似乎是在相同或更低版本中编译的。但是,postgre 驱动程序是使用较新版本编译的 - 当我将源版本设置为 1.7 并将 Java 8 SDK 设置为 SDK 时,程序在一些不同的异常中崩溃(但这是由于我的编程错误 - 无关) .我只是在我尝试(完全绝望)在代码中手动创建驱动程序的新对象(而不是将创建委托给持久性提供者)之后才发现这一点 - 然后我得到了主要的次要版本异常,我知道是什么问题。
【讨论】:
以上是关于GWT + IntelliJ Idea - 添加服务器端库的主要内容,如果未能解决你的问题,请参考以下文章
如何在Intellij IDEA 2018.2中调试GWT 2.8.1作为java代码而不是java脚本
Intellij 12、GWT 2.6.0-rc1 和超级开发模式
Glassfish服务器不在IntelliJ IDEA Ultimate 2017.3.4的列表中