web-dev-qa-db-fra.com

Charger une ressource contenue dans un pot

Dans ma candidature, je charge des ressources de cette manière:

WinProcessor.class.getResource("repository").toString();

et cela me donne:

file:/root/app/repository   (and I replace "file:" with empty string)

Cela fonctionne bien lorsque j'exécute mon application de l'EDI, mais lorsque j'exécute le pot de ma candidature:

Java -jar app.jar

Le chemin devient:

jar:/root/app.jar!/repository

y a-t-il un moyen de résoudre ce problème?

Je vais utiliser le nom du directeur du "référentiel" afin de créer ceci:

ConfigurationContext ctx = (ConfigurationContext) ConfigurationContextFactory.createConfigurationContextFromFileSystem(repositoryString, null);

De la même manière, je vais obtenir un nom de fichier (au lieu d'un dir) et je l'utiliserai de cette façon:

System.setProperty("javax.net.ssl.trustStore", fileNameString)
21
Giancarlo

On dirait que vous essayez ensuite de charger la ressource en utilisant un FileInputStream ou quelque chose comme ça. Ne faites pas cela: au lieu d'appeler getResource, appelez getResourceAsStream et lisez les données de cela.

(Vous pouvez plutôt charger les ressources de l'URL, mais appeler getResourceAsStream est un peu plus pratique.)

EDIT: Ayant vu votre réponse mise à jour, il semble que d'autres bits de code s'appuient sur les données étant dans un fichier unique physique dans le système de fichiers. La réponse ne doit donc pas la regrouper dans un fichier JAR en premier lieu. Vous pourrait Vérifiez si c'est dans un fichier séparé et s'il ne l'extrait pas dans un fichier temporaire, mais c'est assez Hacky IMO.

35
Jon Skeet

Construire un URL, vous pouvez ensuite charger une ressource (même dans un fichier JAR) à l'aide de la méthode openStream Méthode.

5
Konrad Rudolph