2012-10-01 9 views
5

Tengo una clase de resorte con método principal. Dentro de la clase estoy tratando de leer los valores de applicationContext.xml. Mi intención es organizar esta clase principal junto con sus jars dependientes, archivos de propiedades y applicationContext.xml.No se puede leer applicationContext.xml al ejecutar la clase de resorte como jar ejecutable

Pero cuando intento ejecutar el archivo jar a través del símbolo del sistema de Unix, parece que el archivo applicationContext no se está cargando.

El applicationContext.xml es visto dentro del archivo jar y soy capaz de ver los sysouts dentro de mi código clase.Los utilizado para leer el applicationContext.xml es

ApplicationContext context = new ClassPathXmlApplicationContext(
    "classpath*:**/applicationContext.xml"); 

Al imprimir contexto, me está dando el mensaje a continuación.

org[email protected]89fbe3: start 
up date [Mon Oct 01 15:07:43 IST 2012]; root of context hierarchy 

Cuando trato de imprimir context.getBeanDefinitionCount() - que me da 0.

Pero soy capaz de excute con éxito este a través de eclipse. Es capaz de leer el applicationContext.xml y darme el recuento de frijoles como 13.

No estoy seguro de por qué no funciona cuando lo ejecuto como un frasco. Por favor, ayúdenme con sus comentarios.

+0

Un archivo jar es solo un archivo zip. Intente descomprimirlo y mirar adentro. ¿El contexto de la aplicación está allí? ¿Contiene el contenido que esperaba? – Pace

+0

Sí, lo he descomprimido y puedo ver el ApplicationContext dentro. Pero todavía no está recogiendo los valores. – raga

+0

¿Hay solo una applicationContext.xml en el contenedor? ¿Estás seguro de que no hay otros archivos jar en el classpath que también puedan contener un applicationContext.jar? – Pace

Respuesta

1

¿Cómo se obtuvo el paquete .jar? ¿Usaste el asistente de exportación de Eclipse? Es probable que haya puesto el "applicationContext.xml" en la carpeta "/ resources". Asegúrese de corregir la "Ruta de compilación de Java" en Eclipse. Elimine todas las etiquetas de exclusión que pueden estar presentes en la carpeta "/ src/main/resources". La carpeta de recursos debe considerarse una ruta de clases, no solo una carpeta con algunos archivos xml en el paquete .jar. Espero que ayude.

2

Una cita de la (el énfasis es mío) Spring documentation:

Tenga en cuenta que "ruta de clases *:" cuando se combina con los patrones de estilo hormiga sólo funcionará de forma fiable con al menos un directorio raíz antes de que el patrón comienza, a menos que los archivos de destino reales residan en el sistema de archivos. Esto significa que un patrón como "classpath *: *. Xml" no recuperará archivos de la raíz de los archivos jar, sino solo desde la raíz de los directorios expandidos. Esto se origina a partir de una limitación en el método JDK ClassLoader.getResources() que solo devuelve ubicaciones del sistema de archivos para una cadena vacía pasada (lo que indica posibles raíces para buscar).

-1

He tenido problemas con el mismo problema. Puedo ejecutar bien mi aplicación desde dentro de Eclipse, pero cuando la exporto como un archivo ejecutable, falla.

que han trabajado en torno al tema por:

  1. ir a la pantalla de ruta de compilación en Eclipse y la eliminación de los filtros en la carpeta /resources. Esto hace que la exportación coloque la carpeta META-INF y sus contenidos que están bajo /resources en el nivel superior del archivo .jar.
  2. Retire todos los comodines de la ruta de contexto de aplicación:

    applicationContext = new ClassPathXmlApplicationContext( "classpath*:META-INF/spring/applicationContext*.xml");
    convierte
    applicationContext = new ClassPathXmlApplicationContext("classpath:META-INF/spring/applicationContext.xml");

Estoy seguro de que esto es debido a alguna diferencia en el cargador de clases entre el entorno Eclipse y mi entorno de windows java. Averiguar cómo resolver eso será la próxima tarea.

+0

Si tiene una nueva pregunta, por favor, haga clic en el botón [Ask Question] (http://stackoverflow.com/questions/ask). Incluye un enlace a esta pregunta si ayuda a proporcionar contexto. –

+0

@JigarParekh El usuario solo mencionó que tenían el mismo problema que el contexto de cómo lo resolvieron. Esta es una respuesta, no una pregunta. – starsplusplus

Cuestiones relacionadas