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

时间:2015-07-30 18:18:49

标签: java mysql xml hibernate maven

我的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时它会停止工作但我在类路径中有它,因为你可以看到enter image description here

由于

修改

这是我在eclipse项目中的目录

enter image description here

然后我打开.jar文件

enter image description here

您是说.xml应该在根目录中吗?

6 个答案:

答案 0 :(得分:7)

您的构建项目中没有/src/main/resources,这就是maven在构建之前保存文件的位置。在构建项目时(我假设您正在构建一个.jar - 工件)maven将执行以下操作:

  1. 所有.java - src/main/java中的文件将被编译为.class文件,并将移至与其包对应的jar子目录
  2. src/main/resources中的所有文件都将被复制到jar-file
  3. 的根目录

    所以项目中的文件结构:

    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)

mavenhibernate一起使用时,只需要激活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目录下,而不是放在资源文件夹

Hibernate config [1]

并像这样引用文件 配置配置=新配置();
configuration.configure( “/ hibernate.cfg.xml中”);

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

我希望这有帮助!

答案 5 :(得分:0)

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

enter image description here