2015-07-30 13 views
5

Tôi có hibernate.cfg.xml đặt tại src/main/resources/ nhưng tôi vẫn gặp lỗi này khi chạy dự án maven, tôi cũng đã thử đặt đường dẫn đến tệp trong cấu hình như thế này nhưng vẫn đã gặp lỗiTệp Java - hibernate.cfg.xml Không tìm thấy

Configuration conf = new Configuration(); 
conf.configure("/src/main/resources/hibernate.cfg.xml"); 

Tôi đang làm gì sai?

Và khi tôi đi đến các thuộc tính của dự án và chuyển đến Nguồn tôi thấy/src/main/resources trong đường dẫn xây dựng?

Nó cũng chạy khi tôi thực hiện nó trong nhật thực, nhưng khi tôi xuất khẩu sang jar nó ngừng hoạt động nhưng tôi có nó trong đường dẫn lớp như bạn có thể nhìn thấy enter image description here

Cảm ơn

Sửa

Đây là thư mục của tôi trong dự án eclipse của tôi

enter image description here

Và sau đó ở đây là nó khi tôi mở file .jar

enter image description here

Bạn đang nói rằng .xml phải ở trong thư mục gốc?

+0

phiên bản hibernate bạn đang sử dụng – dom

+0

@dom hibernate 4.1.9 – spenf10

+0

xóa đối số chuỗi khỏi cấu hình và thực hiện dự án xây dựng sạch và chạy bằng cách xác định lớp chính – dom

Trả lời

6

Không có /src/main/resources trong dự án đã tạo của bạn, đó chỉ là nơi maven giữ các tệp trước khi xây dựng. Trong khi xây dựng dự án (tôi giả sử bạn đang xây dựng một -artifact .jar) maven sẽ làm như sau:

  1. Tất cả .java -files trong src/main/java sẽ được biên dịch để .class-file và sẽ được chuyển đến các thư mục con của jar tương ứng với gói của họ
  2. Tất cả các file từ src/main/resources sẽ được sao chép vào thư mục gốc của jar-file

Vì vậy, đây tập tin cấu trúc trong dự án của bạn:

src 
| 
+-main 
    | 
    +-java 
    | | 
    | +- mypackage 
    |   | 
    |   +- MyClass.java 
    | 
    +-resources 
     | 
     +- hibernate.cfg.xml 

sẽ kết thúc trong .jar-file của bạn như thế này:

project.jar 
| 
+- mypackage 
|  | 
|  +- MyClass.class 
| 
+- hibernate.cfg.xml 

Điểm quan trọng là: Tất cả các file từ /src/main/resources sẽ kết thúc trong classpath của dự án xây dựng của bạn. Nhưng kể từ khi cấu hình file của bạn được đặt tên hibernate.cfg.xml và nằm trên classpath bạn nên có OK chỉ làm

Configuration conf = new Configuration(); 
conf.configure(); 

Lưu ý rằng configure() được gọi wthout một cuộc tranh cãi, vì vậy có nghĩa là "Hãy tìm một tập tin gọi là hibernate.cfg.xml trên hiện tại của bạn classpath ". Vì vậy, hãy thử xóa đối số khỏi số configurecall của bạn.

+0

Tôi đoán nó sẽ rõ ràng hơn một chút, nếu bạn thêm ví dụ về cấu trúc tệp trước và sau khi xây dựng. – Jan

+0

Vì vậy, bạn đang nói những gì tôi đang làm nên được tốt, tôi nghĩ như vậy quá, nhưng nó không làm việc, bạn có thể giải thích thêm một chút về những gì bạn có nghĩa là tôi '.war' và các công cụ – spenf10

+0

@Jan cảm ơn cho đề nghị, Cố gắng thêm nó vào câu trả lời –

4

Khi sử dụng maven với hibernate, bạn chỉ cần kích hoạt shade plugin và hibernate.cfg.xml sẽ đi vào đúng vị trí, sao cho bạn có thể chạy tệp bằng java -jar jarfile.jar.Đoạn gì bạn cần là một cái gì đó như:

<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> 

Để tạo uberjar thích hợp, loại mvn package và Bob chú của bạn.

+0

Bạn đang nói để đặt xml trên trong tệp pom.xml của tôi? Và sau đó làm 'mvn package' trong terminal? – spenf10

+0

Vâng, đó chính là điều tôi đang nói. – hd1

+0

okay Tôi đã làm điều đó và có 'BUILD SUCCESS' và sau đó tôi chỉ cần xuất như .jar và chạy nó? – spenf10

0

Nếu bạn chắc chắn tập tin của bạn trong resources thư mục sau đó kiểm tra Right click on project->Properties->Deployment Assembly này và kiểm tra xem bản đồ tập tin tài nguyên của bạn với Triển khai Đường dẫn hay không

enter image description here

+0

xin lỗi tôi không thấy 'Triển khai hội'? – spenf10

+0

Bạn đang sử dụng IDE nào? –

+0

Tôi đang sử dụng eclipse – spenf10

3

Đầu tiên rõ ràng một điều rằng nếu bạn đang sử dụng maven với chế độ ngủ đông vì vậy không có cần phải xác định tên của hibernate.cfg.xml kêu gọi configure()

đóng dự án của bạn sau đó mở lại nó sử dụng mã dưới đây để tạo ra nhà máy phiên bạn cần ngủ đông 4 hoặc cao hơn

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(); 
    } 
} 

sử dụng lớp chủ yếu sau đây cho mục đích thử nghiệm

class Main { 
    public static void main(String[] args) { 
     HibernateUtils.createSessionFactory(); 
     SessionFactory sessionFactory = HibernateUtils.getSessionFactory(); 

     // do your task 

     HibernateUtils.shutdown(); 
    } 
} 
3

Thay vì:

configuration.configure("src/main/resources/hibernate.cfg.xml"); 

Sử dụng:

configuration.configure("/main/resources/hibernate.cfg.xml"); 
3

Giữ của bạn tập tin cấu hình dưới sr bình thường c thư mục riêng của mình, không phải để đặt dưới thư mục nguồn

Hibernate config [1]

Và tham khảo các tập tin như cấu hình Cấu hình = new Cấu hình này();
configuration.configure ("/ hibernate.cfg.xml");

// Ở đây tôi coi lớp cấu hình (HibernateSessionFactory.java) là có trong cùng một gói

Tôi hy vọng điều này sẽ giúp!

Các vấn đề liên quan