【问题标题】:Hibernate in Gradle在 Gradle 中休眠
【发布时间】:2015-02-14 05:24:10
【问题描述】:

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

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 构建时,我得到了。 当我从 Eclipse 将整个项目导出为可运行的 jar 时,会抛出不同的错误。

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

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

    罐子{ 显现 { 属性“主类”:“org.gradle.TestHibernateInsertion” } }

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

【问题讨论】:

    标签: java hibernate jdbc jar gradle


    【解决方案1】:

    你所做的有两个主要问题。

    第一个问题是对 Java 库如何工作的理解问题。当您编译一个程序并生成一个 jar 文件时,将库作为​​依赖项,编译器只会检查您是否正确使用了库中的类和方法,并且生成的 jar 文件不包含库中的所有代码。 jar 文件包含的所有内容都是您自己的类和资源。所以你仍然需要在运行时在类路径中拥有这些库。这意味着您启动应用程序的命令行应该是这样的

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

    您的代码所依赖的所有库,以及这些库所依赖的库等(递归地)都需要在类路径中。

    如果您创建一个可执行的 jar 文件,那么 jar 文件的清单必须包含一个类路径条目,其中列出了该 jar 文件所需的所有 jar 文件的相对路径。

    您犯的第二个错误是您假设configure() 方法采用文件的相对路径。它没有。它需要的是从类路径到资源的路径。 ClassLoader 使用此资源路径来加载资源。所以路径应该看起来像"org/gradle/hibernate.cfg.xml"

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

    【讨论】:

    • Nixet:谢谢。你真的让我明白了某些事情。再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 2015-07-07
    • 2018-04-06
    • 2014-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多