J'ai une structure de projet comme celle-ci:
src
|-main
|-Java
|-com.abc.xyz
|-Login.Java
Je dois ajouter un fichier de ressources à cela et lire la ressource avec
InputStream is = getClass().getResourceAsStream("launchers.properties");
Cela donne null.
Dans Intellij, je ne parviens pas à ajouter un nouveau package sous src/main
pour le dossier resources
, de sorte que la structure du projet se présente comme ceci. Comment charger le fichier de ressources launchers.properties
dans le projet?
src
|-main
|-Java
|-com.abc.xyz
|-Login.Java
|-resources
|-com.abc.xyz
|-Login
|-launcher.properties
J'ai essayé la solution suggérée par @maba mais ne fonctionne toujours pas
Le launcher.properties
ne doit pas se trouver dans un dossier appelé Login
. Il devrait être placé directement dans le dossier src/main/resources/com/abc/xyz
.
C’est vraiment aussi simple que je l’ai dit, mais si le dossier de ressources n’est pas marqué comme un dossier de sources, cela peut être le problème.
Ceci est la classe initiale et la configuration:
Maintenant, créez le dossier de ressources:
Ce dossier nouvellement créé doit être automatiquement marqué en tant que dossier de sources. S'il est marqué en bleu, il l'est. Sinon, vous devrez le marquer manuellement:
Vous pourrez maintenant y ajouter des packages:
Et maintenant, vous pouvez y ajouter le fichier:
Et réexécuter l'application ne vous donnera aucune valeur null
:
Et la vue des paquets affichera sûrement le fichier launchers.properties
également:
Comme @maba l'a souligné, votre fichier de propriétés doit se trouver dans le même package que votre classe pour que votre code fonctionne.
Donc, vous devriez avoir deux fichiers:
Si IntelliJ montre la ressource ou pas, la question est posée. Ce que vous devez faire est de vérifier si les résultats sont inclus dans votre artefact cible.
Faites un build all
dans IntelliJ, ouvrez le fichier WAR/JAR/EAR résultant avec votre visualiseur Zip préféré et naviguez dans le dossier "com/abc/xyz". Vous devriez voir les deux fichiers ici.
depuis le menu Exécuter/modifier la configurationin VM vous devez ajouter -Dspring.config.location = fichier-chemin
Je l'ai essayé dans IntelliJ, et ça marche!
J'ai eu le même problème et j'ai remarqué que le fichier de ressources, par exemple: my.properties
n'est pas copié dans le dossier du module correspondant dans le répertoire target
après que la génération se soit produite. Afin de résoudre ce problème, j'ai dû demander à Maven de copier les ressources du répertoire du module dans le répertoire target
au cours du processus de construction. Dans le fichier .pom
, j'ai ajouté l'élément <resource>
comme ceci:
<project ...>
...
<build>
...
<resource>
<directory>src/main/Java/com/abc/xyz</directory>
<targetPath>com/abc/xyz</targetPath>
</resource>
</build>
...
</project>
Notez que l’élément <directory>
est relatif à l’emplacement du fichier .pom
, c’est-à-dire le répertoire racine du projet, et l’élément <targetPath>
indique le nom du package séparé par des barres obliques.