我刚刚学习设置 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 时,我会抛出不同的错误。
很想知道为什么当我们使用不同的技术构建 jar 时抛出的错误会有所不同,以及如何纠正错误。
在我的项目上执行通过运行 gradle build 命令提供的 jar 时,出现错误,我将其解释为未定义类条目,但我已在 build.gradle 文件中将其定义为
jar { 显现 { 属性'主类':'org.gradle.TestHibernateInsertion' } }
从 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/