[英]Java - hibernate.cfg.xml File Not Found
我的hibernate.cfg.xml
位于src/main/resources/
但是当我运行我的maven项目时我一直收到这个错误,我也尝试在这样的配置中放置文件的路径,但仍然得到错误
Configuration conf = new Configuration();
conf.configure("/src/main/resources/hibernate.cfg.xml");
我究竟做错了什么?
当我转到项目的属性并转到Source时,我在构建路径中看到/ src / main / resources?
它也在我在eclipse中运行时运行,但是当我导出到jar时它会停止工作但我在类路径中有它,你可以看到
谢谢
编辑
这是我的eclipse项目中的目录
然后就是我打开.jar文件时的情况
你是说.xml应该在根目录中吗?
你的构建项目中没有/src/main/resources
,这就是maven在构建之前保存文件的地方。 在构建项目时(我假设您正在构建.jar
-artifact)maven将执行以下操作:
src/main/java
所有.java
文件将被编译为.class文件,并将被移动到与其包对应的jar
子目录中 src/main/resources
所有文件将被复制到jar-file
的根jar-file
所以你的项目中的这个文件结构:
src
|
+-main
|
+-java
| |
| +- mypackage
| |
| +- MyClass.java
|
+-resources
|
+- hibernate.cfg.xml
将最终出现在你的.jar-file
:
project.jar
|
+- mypackage
| |
| +- MyClass.class
|
+- hibernate.cfg.xml
关键点是: /src/main/resources
所有文件最终都会出现在构建项目的类路径中。 但是,由于您的配置文件名为hibernate.cfg.xml
,并且位于类路径上,因此您应该可以
Configuration conf = new Configuration();
conf.configure();
请注意, configure()
在没有参数的情况下被调用,因此这意味着“在当前类路径中查找名为hibernate.cfg.xml
的文件”。 所以尝试从configure
-call中删除参数。
当使用带有hibernate的 maven时,只需要激活shade插件 ,hibernate.cfg.xml将进入正确的位置,这样你就可以使用java -jar jarfile.jar
运行该文件。 你需要的节是这样的:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.example.jpa.Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
要生成适当的uberjar,请输入mvn package
然后输入Bob的叔叔。
首先明确一件事,如果你使用maven和hibernate,所以在调用configure()
不需要定义hibernate.cfg.xml
的名字
关闭你的项目然后重新打开它使用下面的代码来生成你需要休眠4或更高版本的会话工厂
public class HibernateUtils {
private static SessionFactory sessionFactory = null;
private static Logger logger = Logger.getLogger(HibernateUtils.class.getName());
public static void createSessionFactory() {
Configuration configuration = new Configuration().configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties());
try {
sessionFactory = configuration.buildSessionFactory(builder.build());
} catch (Exception exe) {
exe.printStackTrace();
}
logger.debug("Session factory created");
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void shutdown() {
if (sessionFactory != null)
getSessionFactory().close();
}
}
使用以下主类进行测试
class Main {
public static void main(String[] args) {
HibernateUtils.createSessionFactory();
SessionFactory sessionFactory = HibernateUtils.getSessionFactory();
// do your task
HibernateUtils.shutdown();
}
}
代替:
configuration.configure("src/main/resources/hibernate.cfg.xml");
使用:
configuration.configure("/main/resources/hibernate.cfg.xml");
将配置文件保存在正常的src目录下,而不是放在resources文件夹下
并参考像这样的文件Configuration configuration = new Configuration();
configuration.configure( “/ hibernate.cfg.xml中”);
//这里我认为配置类(HibernateSessionFactory.java)在同一个包中
我希望这有帮助 !
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.