繁体   English   中英

Java - 找不到hibernate.cfg.xml文件

[英]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将执行以下操作:

  1. src/main/java所有.java文件将被编译为.class文件,并将被移动到与其包对应的jar子目录中
  2. 来自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文件夹下

Hibernate配置[1]

并参考像这样的文件Configuration configuration = new Configuration();
configuration.configure( “/ hibernate.cfg.xml中”);

//这里我认为配置类(HibernateSessionFactory.java)在同一个包中

我希望这有帮助 !

如果您确定您的resources文件夹中的文件,请检查此项Right click on project->Properties->Deployment Assembly并检查您的资源文件是否映射到部署路径

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM