receive - subir archivos spring
El archivo dentro del contenedor no está visible para la primavera (3)
Todas
Creé un archivo jar con el siguiente MANIFEST.MF dentro:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.3
Created-By: 1.6.0_25-b06 (Sun Microsystems Inc.)
Main-Class: my.Main
Class-Path: . lib/spring-core-3.2.0.M2.jar lib/spring-beans-3.2.0.M2.jar
En su raíz hay un archivo llamado my.config al que se hace referencia en mi spring-context.xml de la siguiente manera:
<bean id="..." class="...">
<property name="resource" value="classpath:my.config" />
</bean>
Si ejecuto el jar, todo se ve bien escept la carga de ese archivo específico:
Caused by: java.io.FileNotFoundException: class path resource [my.config] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/D:/work/my.jar!/my.config
at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:205)
at org.springframework.core.io.AbstractFileResolvingResource.getFile(AbstractFileResolvingResource.java:52)
at eu.stepman.server.configuration.BeanConfigurationFactoryBean.getObject(BeanConfigurationFactoryBean.java:32)
at eu.stepman.server.configuration.BeanConfigurationFactoryBean.getObject(BeanConfigurationFactoryBean.java:1)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142)
... 22 more
- las clases se cargan desde dentro del tarro
- la primavera y otras dependencias se cargan desde frascos separados
- se carga el contexto de primavera (new ClassPathXmlApplicationContext ("spring-context / applicationContext.xml"))
- my.properties se carga en PropertyPlaceholderConfigurer ("classpath: my.properties")
- si pongo mi archivo .config fuera del sistema de archivos y cambio la URL del recurso a ''archivo'', todo parece estar bien ...
¿Algun consejo?
Si sus archivos spring-context.xml y my.config están en diferentes jar, entonces necesitará usar classpath*:my.config
?
Más información aquí
Además, asegúrese de estar utilizando resource.getInputStream()
no resource.getFile()
al cargar desde dentro de un archivo jar.
Tuve un problema similar al usar Tomcat6.x y ninguno de los consejos que encontré me ayudaron. Al final borré la carpeta de work
(de Tomcat) y el problema desapareció.
Sé que es ilógico, pero con fines de documentación ...
Sé que esta pregunta ya ha sido respondida. Sin embargo, para aquellos que usan Spring Boots, este enlace me ayudó - https://smarterco.de/java-load-file-classpath-spring-boot/
Sin embargo, resourceLoader.getResource("classpath:file.txt").getFile();
estaba causando este problema y el comentario de sbk:
Eso es. Un java.io.File representa un archivo en el sistema de archivos, en una estructura de directorio. The Jar es un archivo java.io.File. Pero cualquier cosa dentro de ese archivo está fuera del alcance de java.io.File. En lo que se refiere a Java, hasta que no esté comprimido, una clase en el archivo jar no es diferente de una palabra en un documento de Word.
me ayudó a entender por qué usar getInputStream () en su lugar. ¡Funciona para mi ahora!
¡Gracias!