web-dev-qa-db-fra.com

Ajouter un fichier de propriétés au classpath d'IntelliJ

J'exécute un simple Java à partir d'IntelliJ IDE à l'aide du menu Exécuter-> Exécuter. Il fonctionne correctement. Maintenant, je souhaite ajouter la journalisation log4j.

J'ai ajouté un dossier de ressources sous la racine de mon projet. J'ai ajouté un fichier log4j.properties dans ce dossier. J'ai changé le code pour enregistrer quelque chose.

Quelle est la bonne façon de dire à IntelliJ d'inclure le dossier de ressources dans le chemin d'accès aux classes afin que le fichier de propriétés soit visible?

Avec IntelliJ 8, je pouvais deviner comme un singe bourré et le faire fonctionner finalement. J'ai 9 maintenant et je suis totalement infructueux. J'essaie depuis une heure. Que diriez-vous d'une option "Ajouter au classpath" quelque part?/fumées/évent/rant

115
Tony Ennis

Essaye ça:

  • Aller à la structure du projet.
  • Sélectionnez votre module.
  • Recherchez le dossier dans l'arborescence à droite et sélectionnez-le.
  • Cliquez sur le bouton Sources situé au-dessus de cette arborescence (avec le dossier bleu) pour transformer ce dossier en dossier sources.
83
ColinD

En fait, vous avez au moins deux façons de le faire, la première est décrite par ColinD, il vous suffit de configurer le dossier "resources" en tant que dossier Sources dans IDEA. Si Resource Patterns contient l'extension de votre ressource, elle sera alors copiée dans le répertoire de sortie lorsque Make le répertoire de projet et de sortie est automatiquement un chemin d'accès aux classes de votre application.

Une autre méthode courante consiste à ajouter directement le dossier "resources" au classpath. Allez dans Structure du projet | Modules | Votre module | Dépendances, cliquez Ajouter, bibliothèque de modules à entrée unique, indiquez le chemin d'accès aux "ressources". dossier.

Une autre solution consisterait à placer le fichier log4j.properties directement sous la racine source de votre projet (dans le répertoire du package par défaut). C'est la même chose que la première façon, sauf que vous n'avez pas besoin d'ajouter une autre racine source dans les paramètres du module Chemins, le fichier sera copié dans le répertoire de sortie de Make.

Si vous voulez tester avec différentes configurations log4j, il peut être plus facile de spécifier un fichier de configuration personnalisé directement dans le fichier configuration Exécuter/Déboguer, paramètres de la machine virtuelle comme:

-Dlog4j.configuration=file:/c:/log4j.properties.

47
CrazyCoder

J'ai le même problème et ça m'énerve énormément !!

J'ai toujours pensé que j'étais obligé de faire comme réponse 2. Cela fonctionnait dans Intellij 9 (maintenant en utilisant 10).

Cependant, j'ai compris qu'en ajoutant ces lignes à mon fichier maven pom, cela aide:

<build>
  ...
  <resources>
    <resource>
      <directory>src/main/resources</directory>
    </resource>
  </resources>
  ...
</build>
39
Peter Thygesen

J'ai passé beaucoup de temps à comprendre comment faire cela dans Intellij 13x. Apparemment, je n'ai jamais ajouté les fichiers de propriétés aux artefacts qui les nécessitaient, ce qui constitue une étape distincte d'Intellij. La configuration ci-dessous fonctionne également lorsque vous avez un fichier de propriétés partagé par plusieurs modules.

  • Accédez à la configuration de votre projet (CTRL + ALT + SHIFT + S)
  • Dans la liste, sélectionnez le module auquel vous souhaitez ajouter un ou plusieurs fichiers de propriétés.
  • Sur la droite, sélectionnez l'onglet Dépendances.
  • Cliquez sur le plus vert et sélectionnez "Jars ou répertoires".
  • Sélectionnez maintenant le dossier contenant le ou les fichiers de propriétés. (Je n'ai pas essayé d'inclure un fichier individuel)
  • Intellij va maintenant vous demander quelle est la "catégorie" du fichier sélectionné. Choisissez "classes" (même si elles ne le sont pas).
  • Vous devez maintenant ajouter les fichiers de propriétés à l'artefact. Intellij vous donnera le raccourci indiqué ci-dessous. Il affichera des erreurs dans la partie rouge en bas et une "ampoule rouge" qui, une fois cliqué, vous indique une option pour ajouter les fichiers à l'artefact. Vous pouvez également aller à la section 'artefacts' et ajouter les fichiers aux artefacts manuellement.

enter image description here

16
Julius

Confronté à un défi similaire, ajouter des fichiers avec des extensions .ini au classpath. trouvé cette réponse , qui consiste à l'ajouter aux Préférences -> Compilateur -> Types de ressources -> [...]; *. Ini

13
prototype

Si vous vous retrouvez avec le même problème avec Scala et SBT:

  • Aller à la structure du projet. Le raccourci est (CTRL + ALT + MAJ + S)

  • Dans la liste la plus à gauche, choisissez Paramètres du projet> Modules.

  • Sur la liste de modules à droite de celle-ci, sélectionnez le module du nom de votre projet (sans la construction) et choisissez l'onglet sources

  • Au milieu, développez le dossier qui est la racine de votre projet pour moi c'est /home/<username>/IdeaProjects/<projectName>

  • Examinez la section Racine de contenu à droite, les chemins rouges sont des répertoires que vous n'avez pas créés. Vous voudrez mettre le fichier de propriétés dans un répertoire de ressources. Alors j'ai créé src/main/resources et mettez log4j.properties dedans. Je pense que vous pouvez également modifier la racine de contenu pour la placer où vous le souhaitez (je ne l’ai pas fait).

  • J'ai exécuté mon code avec une configuration SBT et il a trouvé mon fichier log4j.properties.

enter image description here

4
user2361174

Pour ceux d'entre vous qui migrent d'Eclipse vers IntelliJ ou l'inverse, voici une astuce lorsque vous travaillez avec des fichiers de propriétés ou d'autres fichiers de ressources.

C'est exaspérant (cela me coûte toute une soirée), mais les deux projets IDE fonctionnent de manière tout à fait différente lorsqu'il s'agit de rechercher des fichiers de ressources/propriétés lorsque vous voulez exécuter localement à partir de votre IDE ou pendant le débogage. (L’emballage dans un fichier .jar est également très différent, mais il est mieux documenté.)

Supposons que vous ayez une référence de chemin relatif comme celle-ci dans votre code:

new FileInputStream("xxxx.properties");

(pratique si vous travaillez avec des fichiers .properties spécifiques à l'environnement que vous ne souhaitez pas empaqueter avec votre fichier JAR)

INTELLIJ

(J'utilise 13.1, mais pourrait être valable pour plusieurs versions)

Le fichier xxxx.properties doit se trouver dans le répertoire PARENT du projet ROOT pour pouvoir être récupéré au moment de l’exécution de la sorte dans IntelliJ. (Le projet ROOT est l'emplacement du dossier/src)

Éclipse

Eclipse est simplement heureux lorsque le fichier xxxx.properties se trouve dans le projet ROOT lui-même.

Donc, IntelliJ s'attend à ce que le fichier .properties soit d'un niveau supérieur à celui d'Eclipse lorsqu'il est référencé comme ceci!

Cela affecte également la manière dont vous devez exécuter votre code lorsque vous avez la même ligne de code (nouveau FileInputStream ("xxxx.properties");) dans votre fichier .jar exporté. Si vous voulez être agile et ne pas empaqueter le fichier .properties avec votre jar, vous devez exécuter le jar comme ci-dessous afin de référencer correctement le fichier .properties à partir de la ligne de commande:

Jarre exportée par INTELLIJ

Java -cp "/path/to_properties_file/:/path/to_jar/some.jar" com.bla.blabla.ClassContainingMainMethod

Eclipse EXPORTED JAR

Java -jar some.jar

où le fichier jar exécutable exporté Eclipse s'attendra simplement à ce que le fichier .properties référencé se trouve au même emplacement que celui où se trouve le fichier .jar

2
DataHacker

C'est peut-être un peu hors sujet, vu que la question a déjà été répondue, mais j'ai rencontré un problème similaire. Dans mon cas, seuls certains des ressources de test unitaire ont été copiés dans le dossier de sortie lors de la compilation. Mon persistence.xml dans le dossier META-INF a été copié mais rien d'autre.

En fin de compte, j'ai "résolu" le problème en renommant les fichiers posant problème, en reconstruisant le projet, puis en remettant les noms de fichier à ceux d'origine. Ne me demandez pas pourquoi cela a fonctionné mais cela a fonctionné. Ma meilleure hypothèse est que, d'une manière ou d'une autre, mon projet IntelliJ s'était un peu désynchronisé avec le système de fichiers et l'opération de changement de nom a déclenché une sorte de "rescan" interne.

1
user1426162

J'ai eu un problème similaire avec un fichier log4j.xml pour un test unitaire, a fait tout ce qui précède. Mais je me suis rendu compte que c’était parce que je ne faisais que ré-exécuter un test ayant échoué. Si je relance toute la classe de test, le fichier correct est récupéré. Ceci est sous Intelli-j 9.0.4

0
James B

Je sais que je suis une personne idiote, alors après une longue journée fatigante, j'ai passé beaucoup de temps à essayer de résoudre ce problème et à essayer toutes les réponses affichées ci-dessus, mais au final, ce fut l'une de mes erreurs les plus stupides.

J'utilisais org.Apache.logging.log4j.Logger (: fml :) alors que j'aurais dû utiliser org.Apache.log4j.Logger. L'utilisation de cet enregistreur correct m'a sauvé la vie.

0
avp