2012-01-04 27 views
11

Trong ứng dụng của tôi, tôi muốn sử dụng một nguồn lực mà tồn tại trong một thư mục media/src/main/resources/testMediaExifClassPathResource không nhận được classpath

Để có được con đường đó, tôi đã sử dụng đoạn mã này, nằm ở media/src/main/java/com/project/MyClass.java:

ClassPathResource resource = new ClassPathResource("classpath:testMediaExif"); 
File file = resource.getFile(); 
String absolutePath = file.getAbsolutePath(); 

Các lỗi được hiển thị là:

java.io.FileNotFoundException: class path resource [classpath:testMediaExif] cannot be resolved to URL because it does not exist 

Nếu tôi thay đổi mã:

ClassPathResource resource = new ClassPathResource("testMediaExif"); 

Biến absolutePath mất giá trị này:

/Users/blanca/desarrollo/media/target/test-classes/testMediaExif 

Tại sao nó trỏ đến đường dẫn đích? Làm thế nào tôi có thể thay đổi nó?

Trả lời

5

Tôi đoán là vấn đề đường dẫn tuyệt đối là do outputDirectory trong mục tiêu của POM maven của bạn. Trong dự án của tôi, các lớp dữ liệu outputDirectory war/WEB-INF/và từ đó các lớp được thực thi. Nếu tôi thay đổi nó thành một số giá trị rác, lớp đó sẽ không được thực hiện nữa.

Vì vậy, tôi tin rằng đường dẫn tuyệt đối phải làm điều gì đó với vị trí của tệp .class của bạn. Hi vọng điêu nay co ich .

+0

Bạn hoàn toàn đúng!

+0

Tệp .classpath được tạo tự động và tôi sợ các hậu quả mà thay đổi này có thể có các xét nghiệm khác. Ít nhất tôi biết lý do của vấn đề của tôi. Cảm ơn –

17

Có hai vấn đề với new ClassPathResource("classpath:testMediaExif"):

  1. Các classpath: tiền tố chỉ được sử dụng trong các tập tin cấu hình (ví dụ file XML), và không nên được sử dụng nếu bạn đang sử dụng ClasspathResource trực tiếp.
  2. classpath:testMediaExif đề cập đến tài nguyên trong thư mục gốc của đường dẫn lớp, không liên quan đến tệp mà bạn đang tạo tham chiếu.

Hãy thử điều này thay vì:

new ClasspathResource("testMediaExif", getClass()) 

hoặc

new ClasspathResource("testMediaExif", MyClass.class) 

Những điều này sẽ xây dựng một refernce tới một tài nguyên được gọi là testMediaExif so với MyClass.

Một điều nữa:ClasspathResource.getFile() sẽ chỉ hoạt động trong tài nguyên thực sự là tệp. Nếu nó được đóng gói trong một JAR, sau đó nó sẽ không hoạt động.

+0

Cảm ơn, với cách tiếp cận của bạn, vấn đề xảy ra khi tôi cố gắng để có được con đường tuyệt đối. ClasspathResource mới ("testMediaExif", getClass()) lấy đường dẫn trong đó lớp, nhưng các điểm getAbsolutePath để nhắm mục tiêu lại thư mục –

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