2011-08-09 4 views
1

J'ai mis un fichier dans mon paquet grails-app/conf appelé size_config.xml. Lorsque la guerre est construite, puis déballé le fichier apparaît dans WEB-INF/classes avec le nom attendu. Toutefois, lorsque j'essaie de référencer le fichier dans mon application, il prétend que le fichier est introuvable. J'ai essayé toutes les combinaisons que je peux penser serait logique d'essayer de référence comprenant:Impossible de trouver le fichier sur classpath grails war/tomcat

new File("WEB-INF/classes/size_config.xml") 
new File("classes/size_config.xml") 
new File("size_config.xml") 
new File("grails-app/conf/size_config.xml") 

et aucun d'entre eux semblent fonctionner. Quand j'exécute mes tests d'intégration locaux, j'utilise "grails-app/conf/size_config.xml" et trouve le fichier très bien. Comme le fichier est bien emballé, je suppose qu'il ne s'agit pas d'un problème de configuration de déploiement, mais plutôt d'un élément mineur que je ne vois pas. Des idées?

Répondre

3

Essayez ceci:

def servletContext = org.codehaus.groovy.grails.web.context.ServletContextHolder.servletContext 
def file = servletContext.getResource("/WEB-INF/classes/size_config.xml") 
+0

Essayez-le pour le moment. Fonctionne toujours localement, donc définitivement n'a rien fait de mal ... En attendant la construction et le déploiement. – Joseph

+0

@Joseph si le premier ne fonctionne pas. essayez le second. et laisse moi savoir! alors je vais éditer ma réponse! –

+0

La deuxième solution a fonctionné. Merci beaucoup. Vous m'avez sauvé beaucoup plus d'heures d'essayer des solutions aléatoires! – Joseph

0

Vous essayez de traiter les ressources classpath chemins du système de fichiers de disque local à l'aide File tout en se basant sur le répertoire de travail par défaut qui n'est pas contrôlable à l'intérieur de l'application. Ça n'est pas correct. Vous devez l'obtenir en tant que ressource de chemin de classe. Le /WEB-INF/classes est couvert par défaut par le chemin de classe. Il vous suffit donc d'obtenir "size_config.xml" à partir du classpath.

ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
InputStream sizeConfig = classLoader.getResourceAsStream("size_config.xml"); 
// ... 
+0

Si c'est le cas, ce qui ne fonctionne pas indiquerait un problème avec l'installation? Je viens de vérifier et à la fois localement et sur le serveur, size_config.xml est sous/WEB-INF/classes. Des réflexions sur ce qui le ferait ne pas être chargé correctement dans le classpath? – Joseph

+1

J'ai remarqué que j'avais une faute de frappe dans mon exemple. Il devrait utiliser '_' au lieu de' -' dans le nom de fichier. Je vais corriger la réponse, mais en avez-vous tenu compte? D'ailleurs, les ressources ne sont pas "chargées" dans le classpath. Le "classpath" est juste une collection de chemins de système de fichiers de disque local où la JVM devrait rechercher les fichiers qui doivent être chargés par le chargeur de classe. – BalusC

+0

Le deuxième exemple d'Arthur ci-dessus a fait l'affaire après un certain temps. – Joseph

Questions connexes