web-dev-qa-db-fra.com

Ajout de ressources dans le projet IntelliJ for Maven

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

37
vikas

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:

enter image description here

Maintenant, créez le dossier de ressources:

enter image description here

enter image description here

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:

enter image description here

Vous pourrez maintenant y ajouter des packages:

enter image description here

enter image description here

Et maintenant, vous pouvez y ajouter le fichier:

enter image description here

enter image description here

Et réexécuter l'application ne vous donnera aucune valeur null:

enter image description here

Et la vue des paquets affichera sûrement le fichier launchers.properties également:

enter image description here

56
maba

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:

  • src/principal/Java/com/abc/xyz/Login.Java
  • src/main/resources/com/abc/xyz/launcher.properties

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.

  • S'ils le sont, vous faites quelque chose de mal dans votre code. Vérifiez les fautes de frappe, en particulier les points et les espaces à la fin ou au début (par exemple, "launcher.properties [espace]"), copiez/collez le nom du fichier pour vous assurer
  • S'ils ne sont pas présents, votre configuration IntelliJ est incorrecte. Les ressources ne sont pas incluses dans votre build cible. Vérifiez en ligne pour les tutoriels comment procéder avec IntelliJ idea.
3
boky

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!

0
Sudabe-Neirizi

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.

0
vivanov