J'exécute un programme Java simple à partir de l'IDE IntelliJ en utilisant le menu Exécuter-> Exécuter. Ça fonctionne bien. Maintenant, je veux 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 de classe afin que le fichier de propriétés soit visible?
Avec IntelliJ 8, je pourrais deviner comme un singe ivre et finalement le faire fonctionner. J'en ai 9 maintenant et je n'ai pas du tout de succès. J'essaye depuis une heure. Que diriez-vous d'une option "Ajouter au chemin de classe" quelque part? / fume / évent / diatribe
la source
Réponses:
Essaye ça:
la source
En fait, vous avez au moins 2 façons de le faire, la première est décrite par ColinD, il vous suffit de configurer le dossier "resources" comme dossier Sources dans IDEA. Si les modèles de ressources contiennent l'extension de votre ressource, elle sera copiée dans le répertoire de sortie lorsque vous faites du projet et le répertoire de sortie est automatiquement un chemin de classe de votre application.
Une autre méthode courante consiste à ajouter directement le dossier "resources" au chemin de classe. Aller à la structure du projet | Modules | Votre module | Dépendances , cliquez sur Ajouter , Bibliothèque de modules à entrée unique , spécifiez le chemin d'accès au dossier «ressources».
Une autre solution serait de 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 des chemins du module , le fichier sera copié dans le répertoire de sortie sur Make.
Si vous souhaitez tester avec différentes configurations log4j, il peut être plus facile de spécifier un fichier de configuration personnalisé directement dans la configuration Exécuter / Déboguer , les paramètres de VM classés comme:
-Dlog4j.configuration=file:/c:/log4j.properties
.la source
J'ai le même problème et ça me gêne énormément !!
J'ai toujours pensé que j'étais surposée pour faire comme réponse 2. Cela fonctionnait auparavant dans Intellij 9 (maintenant en utilisant 10).
Cependant, j'ai compris qu'en ajoutant ces lignes à mon fichier maven pom aide:
la source
J'ai passé beaucoup de temps à comprendre comment faire cela dans Intellij 13x. Je n'ai apparemment jamais ajouté les fichiers de propriétés aux artefacts qui les nécessitaient, ce qui est une étape distincte dans Intellij. La configuration ci-dessous fonctionne également lorsque vous disposez d'un fichier de propriétés partagé par plusieurs modules.
la source
Face à un défi similaire en ajoutant des fichiers avec des extensions .ini au chemin de classe. J'ai trouvé cette réponse , qui consiste à l'ajouter à Préférences -> Compilateur -> Modèles de ressources -> [...]; *. Ini
la source
Si jamais vous vous retrouvez avec le même problème avec Scala et SBT:
Accédez à la structure du projet. Le raccourci est (CTRL + ALT + SHIFT + S)
Dans la liste la plus à gauche, choisissez Paramètres du projet> Modules
Sur la liste des 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 que la racine de votre projet pour moi c'est
/home/<username>/IdeaProjects/<projectName>
Regardez la section Content Root sur le côté droit, 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 Resources. J'ai donc créé
src/main/resources
et mis log4j.properties dedans. Je pense que vous pouvez également modifier la racine du 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.
la source
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 une soirée entière pour le savoir) mais les deux IDE fonctionnent assez différemment quand 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 en .jar est également assez différent, mais c'est mieux documenté.)
Supposons que vous ayez une référence de chemin relative comme celle-ci dans votre code:
(ce qui est pratique si vous travaillez avec des fichiers .properties spécifiques à env que vous ne souhaitez pas empaqueter avec votre JAR)
INTELLIJ
(J'utilise 13.1, mais pourrait être valable pour plus de versions)
Le fichier xxxx.properties doit être dans le répertoire PARENT du projet ROOT pour être récupéré au moment de l'exécution comme celui-ci dans IntelliJ. (Le projet ROOT est l'emplacement du dossier / src)
ÉCLIPSE
Eclipse est simplement heureux lorsque le fichier xxxx.properties est à la racine du projet lui-même.
Donc IntelliJ s'attend à ce que le fichier .properties soit 1 niveau plus haut qu'Eclipse lorsqu'il est référencé comme ça !!
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 fichier .jar exporté. Lorsque 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 correctement le fichier .properties à partir de la ligne de commande:
POT EXPORTÉ INTELLIJ
POT EXPORTÉ ECLIPSE
où le fichier jar exécutable exporté Eclipse s'attendra simplement à ce que le fichier .properties référencé soit au même emplacement que celui où se trouve le fichier .jar
la source
C'est peut-être un peu hors sujet, étant donné que la question a déjà reçu une réponse, mais j'ai rencontré un problème similaire. Dans mon cas, seules certaines des ressources de test unitaire ont été copiées 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 problématiques, en reconstruisant le projet, puis en changeant les noms de fichiers à 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'est 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 des ressources" interne.
la source
C'est l'une des erreurs stupides que j'ai faites. J'ai passé beaucoup de temps à essayer de déboguer ce problème et essayé toutes les réponses publiées ci-dessus, mais à la fin, c'était l'une de mes nombreuses erreurs stupides.
J'utilisais
org.apache.logging.log4j.Logger
(: fml :) alors que j'aurais dû utiliserorg.apache.log4j.Logger
. L'utilisation de cet enregistreur correct a sauvé ma soirée.la source
J'ai eu un problème similaire avec un fichier log4j.xml pour un test unitaire, j'ai fait tout ce qui précède. Mais j'ai compris que c'était parce que je ne relançais qu'un test échoué .... si je réexécute toute la classe de test, le fichier correct est récupéré. C'est sous Intelli-j 9.0.4
la source