我的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应该在根目录中吗?
答案 0 :(得分:7)
您的构建项目中没有/src/main/resources
,这就是maven在构建之前保存文件的位置。在构建项目时(我假设您正在构建一个.jar
- 工件)maven将执行以下操作:
.java
- src/main/java
中的文件将被编译为.class文件,并将移至与其包对应的jar
子目录src/main/resources
中的所有文件都将被复制到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
- 调用中删除参数。
答案 1 :(得分:4)
将maven与hibernate一起使用时,只需要激活shade plugin,hibernate.cfg.xml就会进入正确的位置,这样您就可以使用{{{}运行该文件1}}。你需要的节是这样的:
java -jar jarfile.jar
要生成合适的uberjar,请键入 <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>
,Bob是您的叔叔。
答案 2 :(得分:3)
首先要清楚的是,如果你使用带有hibernate的maven,那么在调用hibernate.cfg.xml
时无需定义configure()
的名称
关闭您的项目,然后重新打开它 使用下面的代码生成会话工厂 你需要休眠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();
}
}
答案 3 :(得分:3)
而不是:
configuration.configure("src/main/resources/hibernate.cfg.xml");
使用:
configuration.configure("/main/resources/hibernate.cfg.xml");
答案 4 :(得分:3)
将配置文件保存在正常的src目录下,而不是放在资源文件夹
下
并像这样引用文件
配置配置=新配置();
configuration.configure( “/ hibernate.cfg.xml中”);
//这里我认为配置类(HibernateSessionFactory.java)在同一个包中
我希望这有帮助!
答案 5 :(得分:0)