Hola usuario de nuestra web, hemos encontrado la respuesta a lo que buscas, deslízate y la obtendrás más abajo.
Solución:
Gracias, pero esa no era la solución. Descubrí por qué no me funcionaba.
Ya que había hecho una declaración:
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
Pensé que me referiría al directorio raíz del proyecto cuando el archivo beans.xml estaba allí. Luego puse el archivo de configuración en src/main/resources y cambié la inicialización a:
ApplicationContext context = new ClassPathXmlApplicationContext("src/main/resources/beans.xml");
todavía era una excepción IO.
Luego, el archivo quedó en src/main/resources/ pero cambié la declaración a:
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
y resolvió el problema, tal vez sea útil para alguien.
gracias y saludos!
Editar:
Dado que muchas personas han aprobado la solución y tuve mi primera experiencia con Spring como estudiante hace unos años, siento el deseo de explicar brevemente por qué funciona.
Cuando se compila y empaqueta el proyecto, todos los archivos y subdirectorios de ‘src/main/java’ en el proyecto van al directorio raíz del jar empaquetado (el artefacto que queremos crear). La misma regla se aplica a ‘src/main/resources’.
Esta es una convención respetada por muchas herramientas como maven o sbt en proceso de construcción de proyectos (nota: ¡como configuración predeterminada!). Cuando el código (de la publicación) estaba en modo de ejecución, no podía encontrar nada como “src/main/resources/beans.xml” debido al hecho de que beans.xml estaba en la raíz del jar (copiado en /beans .xml en el jar/ear/war creado).
Al usar ClassPathXmlApplicationContext, la declaración de ubicación adecuada para las definiciones de beans xml, en este caso, era “/beans.xml”, ya que esta es la ruta a la que pertenece en jar y luego en classpath.
Se puede verificar desempaquetando un jar con un archivador (es decir, rar) y ver su contenido con la estructura de directorios.
Recomendaría leer artículos sobre classpath como complemento.
Prueba esto:
new ClassPathXmlApplicationContext("file:src/main/resources/beans.xml");
Archivo: punto de prefijo a los recursos del sistema de archivos, no classpath.
la ruta del archivo puede ser relativa o del sistema (/home/user/Work/src…)
También tuve un problema similar pero por una causa un poco diferente, así que comparto aquí en caso de que pueda ayudar a alguien.
Mi ubicación de archivo
como estaba usando
ClassPathXmlApplicationContext("beans.xml");
hay dos soluciones
- Saque beans.xml del paquete y colóquelo en el paquete predeterminado.
- Especifique el nombre del paquete mientras lo usa, a saber.
ClassPathXmlApplicationContext("com/mypackage/beans.xml");
Recuerda que tienes la opción de aclarar .