131 votes

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

J'ai l'impression d'être un imbécile en demandant ça, mais je suis fatigué de deviner.

J'exécute un simple programme java à partir de l'IDE IntelliJ en utilisant le menu Run->Run. Aucun problème, il fonctionne bien. Maintenant je veux ajouter la journalisation de 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 modifié le code pour enregistrer quelque chose.

Quelle est la bonne façon de dire à intellij d'inclure le dossier des ressources dans le classpath pour que le fichier de propriétés soit vu ?

Avec Intellij 8, je pouvais deviner comme un singe ivre et finalement réussir à faire fonctionner le système. J'ai maintenant 9 et je n'y arrive pas du tout. Cela fait une heure que j'essaie. Je déteste vraiment cette partie d'Intellij. Que diriez-vous d'une option "Add to classpath" quelque part ? /fume /vent /rant

0 votes

Ok, la situation est résolue. Il s'agit d'une nouvelle installation d'IntelliJ - log4J n'est PAS inclus par défaut. Dans mon code, j'avais importé le logger stock, pas log4j. Le logger du stock supporte des méthodes similaires donc il n'était pas évident que j'utilisais le mauvais logger ! Il n'est pas surprenant qu'il ne lise pas le fichier de propriétés de log4j ou qu'il ne signale pas que je dois configurer log4j. Quel coup de pied dans les dents !

0 votes

J'ai trouvé une bonne description pour un débutant en log4j. tuttlem.github.io/2015/02/08/demarrer-logging-avec-log4j2.html

96voto

ColinD Points 48573

Essayez ça :

  • Allez à la structure du projet.
  • Sélectionnez votre module.
  • Trouvez le dossier dans l'arbre à droite et sélectionnez-le.
  • Cliquez sur le bouton Sources au-dessus de cette arborescence (avec le dossier bleu) pour faire de ce dossier un dossier de sources.

0 votes

Je l'ai fait environ 50 fois, je viens de le refaire. Ma sortie ne change pas, même si j'ai changé le modèle de conversion de la mise en page pour quelque chose qui aurait été évident. Je me demande si un autre log4j.properties se trouve dans mon classpath.

30 votes

Vérifiez les modèles de ressources dans les paramètres du compilateur. Vérifiez que "?*.properties" s'y trouve. Il y est par défaut, mais c'est la seule autre chose qui me vient à l'esprit.

3 votes

Alternative au bouton Sources - cliquez avec le bouton droit de la souris sur le répertoire que vous avez créé et sélectionnez "Marquer le répertoire comme" : "Racine de la source"

48voto

CrazyCoder Points 103123

En fait, vous avez au moins 2 façons de le faire, la première est décrite par ColinD, vous configurez simplement le dossier "resources" comme dossier Sources dans IDEA. Si le dossier Modèles de ressources contient l'extension de votre ressource, alors il sera copié dans le répertoire de sortie lorsque vous Faire le projet et le répertoire de sortie sont automatiquement un classpath de votre application.

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

Une autre solution encore serait de mettre le log4j.properties directement sous le Source Root de votre projet (dans le répertoire du package par défaut). C'est la même chose que la première méthode, sauf que vous n'avez pas besoin d'ajouter une autre racine source dans le module. Chemins d'accès le fichier sera copié dans le répertoire de sortie sur Make.

Si vous souhaitez tester avec différentes configurations de log4j, il peut être plus facile de spécifier un fichier de configuration personnalisé directement dans le champ Configuration Run/Debug , Paramètres VM classé comme tel :

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

0 votes

J'ai appliqué vos paragraphes 2 et 3, sans résultat. Je suis sûr que les suggestions travail c'est juste qu'ils n'ont eu aucun effet - il se comporte comme s'il y avait un autre fichier log4j.properties dans le classpath. Mais je ne le vois nulle part. Si je supprime complètement mon fichier de propriétés log4j, je n'obtiens pas l'avertissement "vous devez configurer log4j" dans la console. J'utilise la version gratuite d'IntelliJ (et la version 9.x) pour la première fois, alors peut-être cela a-t-il quelque chose à voir avec cela.

1 votes

L'utilisation du paramètre explicite -D VM n'a pas eu d'effet non plus. À ce stade, je ne peux que supposer que je suis tombé du haut de "l'arbre stupide" et que j'ai touché toutes les branches en descendant ! Je pense que je vais aller faire un tour chez JetBrains et demander aux autres...

0 votes

Pourriez-vous envoyer l'exemple de projet avec les étapes exactes pour reproduire le problème à support@jetbrains.com ?

45voto

Peter Thygesen Points 141

J'ai le même problème et cela m'agace énormément !

J'ai toujours pensé que je devais faire comme la réponse 2. Cela fonctionnait dans Intellij 9 (j'utilise maintenant 10).

Cependant, j'ai découvert que l'ajout de ces lignes à mon fichier maven pom aide :

<build>
  ...
  <resources>
    <resource>
      <directory>src/main/resources</directory>
    </resource>
  </resources>
  ...
</build>

0 votes

C'est exactement le problème que j'avais, maintenant les fichiers de ressources sont copiés dans le dossier de sortie avec succès.

0 votes

Cette réponse fonctionne vraiment. J'ai également fait ce que colinD a suggéré dans ses commentaires. Merci.

0 votes

Merci, c'est la seule solution qui a fonctionné pour moi.

14voto

user645715 Points 1196

J'ai rencontré un problème similaire en ajoutant des fichiers avec des extensions .ini au classpath. J'ai trouvé cette réponse, qui consiste à l'ajouter dans Préférences -> Compilateur -> Modèles de ressources -> [...] ;*.ini

[http://www.markhneedham.com/blog/2011/06/09/intellij-adding-resources-with-unusual-extensions-onto-the-classpath/] [1]

1 votes

C'est exactement le problème que j'avais avec les fichiers .conf.

0 votes

Je me suis dit : qu'est-ce qui ne va pas avec mon code ? Merci pour cette solution

2voto

DataHacker Points 38

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

C'est exaspérant (cela m'a coûté toute une soirée pour le découvrir) mais les deux IDE fonctionnent de manière assez différente lorsqu'il s'agit de rechercher des fichiers de ressources/profils lorsque vous voulez les exécuter localement depuis votre IDE ou pendant le débogage. (Le packaging en .jar est également très différent, mais il est mieux documenté).

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

new FileInputStream("xxxx.properties");

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

INTELLIJ

(J'utilise la 13.1, mais cela peut être valable pour d'autres versions).

Le fichier xxxx.properties doit se trouver dans le répertoire PARENT de la racine du projet afin d'être récupéré au moment de l'exécution comme ceci dans IntelliJ. (La racine du projet est l'endroit où se trouve le dossier /src).

ECLIPSE

Eclipse est juste heureux quand le fichier xxxx.properties est à la racine du projet 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é de cette façon ! !!

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

JAR EXPORTÉ PAR INTELLIJ

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

JAR EXPORTÉ PAR ECLIPSE

java -jar some.jar

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

0 votes

Oui, logging.properties, contrairement à log4j2.xml ou log4j.properties, doit être trouvé dans le module Root d'IntelliJ. De plus, contrairement à Log4j, qui fonctionne tout simplement, j'ai constaté que je devais encore faire des bricolages pour qu'il fonctionne dans IntelliJ (Eclipse serait la même histoire, c'est la faute de Java logging), voir stackoverflow.com/questions/960099/ . Une alternative serait de fixer la configuration run/debug avec -Djava.util.logging.config.file=, ce que je trouve plutôt gênant car je préfère avoir la configuration dans le code ou dans un fichier de propriété attendu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X