2012-10-01 8 views
5

Ho una classe di molla con metodo principale. All'interno della classe sto provando a leggere i valori applicationContext.xml. La mia intenzione è quella di barattare questa classe principale con i suoi giare dipendenti, i file di proprietà e applicationContext.xml.Impossibile leggere applicationContext.xml quando si esegue la classe spring come jar eseguibile

Ma quando provo a eseguire il file jar tramite il prompt dei comandi di Unix, sembra che il file applicationContext non venga caricato.

L'applicationContext.xml è visto all'interno del file jar e sono in grado di vedere i sysouts dentro il mio codice class.The utilizzato per leggere l'applicationContext.xml è

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

quando stampo contesto mi sta dando il messaggio qui sotto

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

Quando provo a stampare context.getBeanDefinitionCount() - mi dà 0.

Ma sono in grado di excute successo questa via eclissi. È in grado di leggere applicationContext.xml e darmi il conteggio dei bean come 13.

Non sono sicuro del motivo per cui non funziona quando lo eseguo come un jar.Per favore aiutatemi con i vostri commenti.

+0

Un file jar è solo un file zip. Prova a decomprimerlo e cercare dentro. Il contesto dell'applicazione è lì? Contiene il contenuto che ti aspettavi? – Pace

+0

Sì ho decompresso e sono in grado di vedere l'applicationContext all'interno.Ma ancora non sta raccogliendo i valori. – raga

+0

C'è un solo applicationContext.xml nel barattolo? Sei sicuro che non ci siano altri jar sul classpath che potrebbero contenere anche un'applicazioneContext.jar? – Pace

risposta

1

Come hai ottenuto il pacchetto .jar? Hai usato la procedura guidata di esportazione di Eclipse? È probabile che tu abbia messo "applicationContext.xml" nella cartella "/ resources". Assicurati di aver risolto il "Percorso di costruzione Java" in Eclipse. Rimuovi tutti i tag di esclusione che potrebbero essere presenti nella cartella "/ src/main/resources". La cartella delle risorse dovrebbe essere considerata un percorso di classe, non solo una cartella con alcuni file xml nel pacchetto .jar. Spero possa aiutare.

2

Una citazione dal Spring documentation (sottolineatura mia):

Si prega di notare che "classpath *:" quando combinato con i modelli Ant-stile funzionerà solo in modo affidabile con almeno una directory principale prima che il modello inizia, a meno che i file di destinazione effettivi non si trovino nel file system. Ciò significa che un modello come "classpath *: *. Xml" non recupererà i file dalla radice dei file jar ma piuttosto dalla radice delle directory espanse. Ciò si origina da una limitazione nel metodo ClassLoader.getResources() di JDK che restituisce solo le posizioni del file system per una stringa vuota passata (indicando le potenziali radici da cercare).

-1

Ho lottato con lo stesso problema. Posso eseguire la mia domanda bene da dentro Eclipse, ma quando esporto come un jar eseguibile, non riesce.

ho lavorato tutto il problema:

  1. andare alla schermata percorso di generazione in Eclipse e rimuovere i filtri sulla cartella /resources. Ciò causa l'esportazione per inserire la cartella META-INF e il suo contenuto che si trovano in /resources nel livello superiore del file .jar.
  2. Rimuovere tutti i caratteri jolly dal percorso contesto dell'applicazione:

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

Sono sicuro che questo è dovuto ad una certa differenza nel classloader tra l'ambiente Eclipse e la mia ambiente Windows java. Capire come risolvere sarà il prossimo compito.

+0

Se hai una nuova domanda, per favore chiedi facendo clic sul pulsante [Chiedi domanda] (http://stackoverflow.com/questions/ask). Includere un collegamento a questa domanda se aiuta a fornire il contesto. –

+0

@JigarParekh L'utente ha solo menzionato che avevano lo stesso problema del contesto per come lo avevano risolto. Questa è una risposta, non una domanda. – starsplusplus

Problemi correlati