2012-10-05 28 views
10

Tengo un proyecto organizado así:resorte dentro de la guerra no puede encontrar el recurso ruta de clase en un archivo jar interior

core 
    -- /src/main/resources/company/config/spring-config.xml 
webapp 
    -- /WEB-INF/applicationContext.xml 

La aplicación web depende de core.jar, que se incluye correctamente en WEB-INF/lib cuando despliego.

En web.xml tengo:

<param-value> 
    /WEB-INF/applicationContext.xml 
</param-value> 

Y en applicationContext.xml tengo:

<import resource="classpath:/company/config/spring-config.xml" /> 

Pero cuando corro, me sale este error:

2012-10-04 20:03:39,156 [localhost-startStop-1] springframework.web.context.ContextLoader ERROR: Context initialization failed 
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to import bean definitions from URL location [classpath:/company/config/spring-config.xml] 
Offending resource: ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [company/config/spring-config.xml]; nested exception is java.io.FileNotFoundException: class path resource [company/config/spring-config.xml] cannot be opened because it does not exist 
    at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68) 
.... 
Caused by: java.io.FileNotFoundException: class path resource [company/config/spring-config.xml] cannot be opened because it does not exist 
    at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:142) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336) 
... 36 more 

Cuando spring-config.xml es en webapp, todo funciona bien.

Me di cuenta de que el / líder se ha eliminado de algunos de los errores en el seguimiento de la pila, y me pregunto si esto tiene algo que ver con eso.

Además, estoy (desafortunadamente) usando Spring 2.5, si eso importa.

+1

eliminar/from /company/config/spring-config.xml y luego marcar – Satya

+0

@Satya: gracias, lo intenté, obtengo el mismo resultado. – JBCP

+0

@JBCP: puede que no funcione cuando elimine la barra diagonal inicial, porque tiene algún problema adicional, pero definitivamente no funcionará con la barra inicial. También es posible que desee leer este artículo, que puede ser útil: http://blog.carbonfive.com/2007/05/17/using-classpath-vs-classpath-when-loading-spring-resources/ – GreyBeardedGeek

Respuesta

13

Para referencia futura, descubrí el problema después de mucha depuración. Resulta Eclipse estaba construyendo mi biblioteca "núcleo" como un frasco, pero con una composición de conjunto de aplicaciones web, así que en vez de mi recurso que se encuentra aquí:

/company/config/spring-config.xml 

se encuentra aquí:

/WEB-INF/company/config/spring-config.xml 

que causó el problema. Había revisado el jarro varias veces antes, pero nunca había notado el escondite "/ WEB-INF" escondido a simple vista.

Eliminar el proyecto y volver a importarlo en Eclipse (a través del archivo Maven pom.xml) no fue suficiente para solucionar el problema.

Tuve que eliminar manualmente los archivos .project, .classpath y .settings específicos de Eclipse. Cuando lo hice y volví a importar el proyecto, todo se solucionó.

La moraleja de la lección es: SIEMPRE compruebe sus rutas de recursos cuando la excepción dice "Archivo no encontrado".

Cuestiones relacionadas