Не удается найти файл на classpath grails war / tomcat - PullRequest
1 голос
/ 09 августа 2011

Я поместил в свой пакет grails-app / conf файл с именем size_config.xml.Когда война построена, то распакованный файл появляется в WEB-INF / classes с ожидаемым именем.Однако, когда я пытаюсь сослаться на файл в моем приложении, он утверждает, что файл не найден.Я перепробовал все комбинации, которые, на мой взгляд, были бы логичными при попытке сослаться, включая:

new File("WEB-INF/classes/size_config.xml")
new File("classes/size_config.xml")
new File("size_config.xml")
new File("grails-app/conf/size_config.xml")

, и ни одна из них, похоже, не работает.Когда я запускаю свои локальные интеграционные тесты, я использую «grails-app / conf / size_config.xml», и он находит файл очень хорошо.Поскольку файл упакован нормально, я предполагаю, что это не проблема конфигурации развертывания, а какой-то незначительный элемент, который я не вижу.Идеи?

Ответы [ 2 ]

3 голосов
/ 09 августа 2011

попробуйте это:

def servletContext = org.codehaus.groovy.grails.web.context.ServletContextHolder.servletContext 
def file = servletContext.getResource("/WEB-INF/classes/size_config.xml")
0 голосов
/ 09 августа 2011

Вы пытаетесь трактовать ресурсы classpath как пути к локальной файловой системе диска, используя File, полагаясь на рабочий каталог по умолчанию, который не контролируется изнутри приложения. Это неправильно. Вам нужно получить его как ресурс classpath. /WEB-INF/classes по умолчанию охватывается classpath. Так что вам просто нужно получить "size_config.xml" из classpath.

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream sizeConfig = classLoader.getResourceAsStream("size_config.xml");
// ...
...