Java 可以用8.4和9.0 postgres(hibernate)库构建一个.war文件吗?

Java 可以用8.4和9.0 postgres(hibernate)库构建一个.war文件吗?,java,hibernate,postgresql,maven,Java,Hibernate,Postgresql,Maven,到目前为止,我们一直在使用maven依赖项来指定库,即: <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>3.6.10.Final</version> </dependency> <dependency> <groupId>

到目前为止,我们一直在使用maven依赖项来指定库,即:

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-core</artifactId>
  <version>3.6.10.Final</version>
</dependency>
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-c3p0</artifactId>
  <version>3.6.10.Final</version>
  <type>jar</type>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>postgresql</groupId>
  <artifactId>postgresql</artifactId>
  <version>8.4-702.jdbc4</version>
</dependency>

org.hibernate

,但它是旧的Hibernate 3.5,不再适用。

最好的解决方案可能是将jdbc驱动程序放入服务器上的共享库文件夹中,而不是将其打包到war中。这可以通过将作用域设置为提供的


您可以使用不同的依赖版本在pom中定义构建概要文件,但这需要调用构建两次,并生成两个不同的war文件。

不确定我是否理解您的问题。我对这个问题的看法略有不同。以下是我的意见/建议:

  • 不要将驱动程序相关的JAR直接绑定到war文件中,使用由应用服务器(tomcat等)管理的数据源
  • 这样,就不会对驱动程序类产生任何依赖
  • 数据源配置可以在app server上完成,您的web应用程序只需知道其JNDI名称即可进行查找
  • 这也将与您的一个war文件相一致,以管理所有方法,因为war文件将真正独立于任何与驱动程序相关的依赖项

  • 这种方法的缺点是需要在AppServer上手动维护驱动程序JAR,但这只是一次任务,并且与任何应用程序级别的更改完全分离

    对于PostgreSQL,应该使用最新版本的JDBC驱动程序,而不管服务器的版本如何,真正非常古老的版本除外

    说:

    这是驱动程序的当前版本。除非你有不寻常的 需求(运行旧的应用程序或JVM),这是驱动程序 你应该使用。它支持Postgresql 7.2或更高版本,并且需要 1.4或更高版本的JVM

    对于PostgreSQL JDBC驱动程序,由于bug已修复,并且添加了功能,因此它们通常只进入最新版本。较新的JDBC驱动程序版本知道较旧的服务器版本,并将根据服务器版本正确运行


    请注意,较旧的JDBC驱动程序不知道较新的服务器版本,事实上,使用比服务器版本旧的JDBC驱动程序可能会导致安全问题。

    快速提示,与您的问题无关:
    postgresql
    依赖项无论如何都应该具有
    运行时
    范围,因为它是在运行时使用的。如果编译不需要
    hibernate-c3p0
    ,它还应该具有
    runtime
    作用域。您可以简单地为两个版本绑定新驱动程序。使用9.1驱动程序连接到8.4没有问题。对于PostgreSQL,无论服务器的版本如何,都应该使用最新版本的JDBC驱动程序,但真正非常古老的版本除外。“这是驱动程序的当前版本。除非您有特殊要求(运行旧应用程序或JVM),否则这是您应该使用的驱动程序。它支持Postgresql 7.2或更高版本,并且需要1.4或更高版本的JVM。”感谢您的建议。完成。我希望我能+2这个,因为我觉得这样回答了两个问题:)1。如何支持PostgreSQL和2的多个版本。您应该选择哪个驱动程序版本