java - 在 Gradle 中 hibernate

标签 java hibernate jdbc jar gradle

我刚刚学习设置 Hibernate-Gradle 项目,我的目录结构如下。

enter image description here

TestHibernateInsertion.java 是应用程序的入口点,它具有以下源代码来在我的 localDB 中放置值。

   public static void main(String[] args)
    {

          Configuration conf = new Configuration().configure   ("../../../resources/org/gradle/hibernate.cfg.xml");

          ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();

          SessionFactory sf = conf.buildSessionFactory(serviceRegistry);
          Session session = sf.openSession();
          Person p = new Person(2132);
          session.persist(p);
          Transaction transact = session.beginTransaction();
          transact.commit();
          session.close();
          System.out.println("Done");
    }

Gradle 构建成功,但是当我通过 Gradle 执行 jar 构建时,我得到了。 enter image description here 当我从 eclipse 中将整个项目导出为可运行 jar 时,我会抛出不同的错误。 enter image description here

  1. 很想知道为什么当我们使用不同的技术构建 jar 时抛出的错误会有所不同,以及如何纠正错误。

  2. 在我的项目上执行通过运行 gradle build 命令提供的 jar 时,出现错误,我将其解释为未定义类条目,但我已在 build.gradle 文件中将其定义为

    jar { 显现 { 属性'主类':'org.gradle.TestHibernateInsertion' } }

  3. 从 Eclipse 执行导出的可运行 jar 时出现错误,它看起来是相对路径错误,但我不知道解决它(也使用了 getResource() 方法。)我们如何引用 xml具有相对路径的主源代码文件中资源文件夹中的文件。

最佳答案

您所做的事情有两个主要问题。

第一个是理解 Java 库如何工作的问题。当您编译程序并生成 jar 文件(以库作为依赖项)时,编译器仅检查您是否正确使用库中的类和方法,并且生成的 jar 文件不包含库中的所有代码。所有 jar 文件包含的是您自己的类和资源。因此,您仍然需要在运行时将库放在类路径中。这意味着启动应用程序的命令行应如下所示

java -cp lib/myjar.jar;lib/hibernate.jar;lib/javassist.jar;... org.gradle.TestHibernateInsertion

你的代码所依赖的所有库,以及库所依赖的库等(递归地)都需要位于类路径中。

如果您创建可执行 jar 文件,则该 jar 文件的 list 必须包含一个类路径条目,列出该 jar 文件所需的所有 jar 文件的相对路径。

您犯的第二个错误是您假设 configure() 方法采用文件的相对路径。事实并非如此。它需要的是从类路径到资源的路径。 ClassLoader 使用该资源路径来加载资源。因此路径应类似于 "org/gradle/hibernate.cfg.xml"

最后,除非您为 gradle 项目做出贡献,否则不应使用 org.gradle 包。使用您自己的公司、协会或其他机构的域名。

关于java - 在 Gradle 中 hibernate ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28512726/

相关文章:

java - Hibernate多实体连接问题,产生额外查询

java - 选择组合框值后更新 JavaFX 中的标签

java - 使用 Java servlet 时何时打开以及何时关闭 mysql 连接?

java.lang.ClassNotFoundException : com/microsoft/sqlserver/jdbc/SQLServerDriver

java - tomcat 中的 PersistenceException(没有 EntityManager 的持久性提供程序)

java - 如何从命令行使用 maven 运行 selenium 测试?

java - Hibernate 逆向工程 - 为什么我会获得 ID 类?

java - 为什么我们要在 Hibernate 配置或映射文件中写入 <!DOCTYPE> 标记

java - 如何使用 hibernate 和 spring @transactional 释放 blob?

java - 为什么我不能在SQL中对许多表使用超过1个deleteRow()?我发现只有第一个rs的行被删除,其他的没有