2012-01-04 11 views
11

w mojej aplikacji, chciałbym skorzystać z zasobów, które istnieją w folderze media/src/main/resources/testMediaExifClassPathResource nie dostać ścieżkę klasy

Aby uzyskać tą drogą, kiedyś ten fragment kodu, który znajduje się w media/src/main/java/com/project/MyClass.java:

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

błąd pokazany jest:

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

Jeśli zmienić ten kod:

ClassPathResource resource = new ClassPathResource("testMediaExif"); 

Zmienna absolutePath przyjmuje tę wartość:

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

Dlaczego to wskazywać na ścieżkę docelową? Jak mogę to zmienić?

Odpowiedz

5

Domyślam się, że bezwzględny problem ze ścieżką jest ze względu na outputDirectory w celu Twojego maven POM. W moim projekcie klasy outputDirectory wojna/WEB-INF/i to stąd zaczynają się zajęcia. Jeśli zmienię ją na jakąś wartość śmieciową, klasa nie będzie już wykonywana.

Wierzę, że absolutna ścieżka musi coś zrobić z lokalizacją plików .class. Mam nadzieję że to pomoże .

+0

Masz całkowitą rację!

+0

Ta plik .classpath jest generowana automatycznie i obawiam się konsekwencji, jakie ta zmiana mogła mieć w inne testy. Przynajmniej znam powód mojego problemu. Dzięki –

17

Istnieją dwa problemy z new ClassPathResource("classpath:testMediaExif"):

  1. classpath: prefiks jest używany tylko w plikach konfiguracyjnych (na przykład pliki XML), i nie powinny być stosowane, jeśli używasz ClasspathResource bezpośrednio.
  2. classpath:testMediaExif odnosi się do zasobu w katalogu głównym ścieżki klasy, a nie do pliku, do którego odwołuje się użytkownik.

Spróbuj to zamiast:

new ClasspathResource("testMediaExif", getClass()) 

lub

new ClasspathResource("testMediaExif", MyClass.class) 

Są wybuduje refernce do zasobu o nazwie testMediaExif względem MyClass.

Jeszcze jedno:ClasspathResource.getFile() będzie działać tylko w zasobach naprawdę jest plikiem. Jeśli jest zapakowany w plik JAR, to nie zadziała.

+0

Dzięki temu podejściu, problem pojawia się, gdy próbuję uzyskać absolutną ścieżkę. nowy ClasspathResource ("testMediaExif", getClass()) pobiera ścieżkę do miejsca, w którym znajduje się klasa, ale punkty getAbsolutePath ponownie trafiają do folderu docelowego –