1
votes

Accéder aux variables de propriété / d'environnement sans lancer Eclipse?

Je veux définir le chemin du fichier de configuration log4j / les autres chemins de dossier qui peuvent être utilisés dans d'autres fichiers de classe, sans coder en dur le chemin du dossier.

Maintenant, j'ai défini les variables comme variable d'environnement. Mais il ne peut être modifié que si je lance Eclipse. Comment définir cette variable de telle sorte que n'importe qui (ne veut pas lancer Eclipse) puisse la modifier, de l'extérieur. En outre, il sera utilisé dans les configurations de test. Il est donc préférable de ne pas le coder en dur et d'avoir tous les chemins de fichiers, etc. faciles à refactoriser.

final static String log4jpath = System.getenv("LOG4J_PATH");


8 commentaires

Il serait utile que vous nous disiez que si vous utilisez un cadre spécifique, il existe de nombreuses façons de faire ce que vous voulez.


Selenium, TestNG et Log4j et moi voulons enregistrer beaucoup d'informations mais je veux définir le chemin des fichiers de configuration log4j et d'autres fichiers de données de test, type d'emplacement "un accès partout". mais ne veux pas qu'il soit caché à l'intérieur de l'éclipse.


Quel chemin de dossier, est-ce le chemin de configuration log4j ou le chemin du fichier pour le journal pour la journalisation?


chemin du fichier de configuration log4j et chemins du pilote, chemin du fichier de données de test, etc.


Pour moi, il semble que vous vous demandez simplement comment définissez une variable d'environnement depuis "l'extérieur" du programme Java. Si tel est le cas, utilisez SET LOG4J_PATH = C: \ chemin \ vers \ peu importe (Windows) ou export LOG4J_PATH = / chemin / vers / quel que soit (Linux), avant d'exécuter le programme Java .


@Andreas, Oui en dehors du programme Java tel qu'un fichier séparé, qui contient tous les autres chemins de fichiers. J'ai vu quelqu'un poser les mêmes questions mais il n'y a pas non plus de réponse. stackoverflow.com/questions/ 21965751 /…


"fichier séparé, qui contient tous les autres chemins de fichiers" Cela s'appelle un fichier de configuration , et est souvent un fichier de propriétés, similaire à la configuration Log4j fichier. Pour identifier un seul fichier de ce type, vous pouvez utiliser une variable d'environnement (comme vous le faites actuellement), une propriété système (plus courante) ou un fichier spécifiquement nommé dans le répertoire actuel, puis les entrées de ce fichier identifieront toutes les valeurs tu veux vraiment.


à droite, je viens de trouver la solution.


3 Réponses :


0
votes

Soni, si vous voulez mettre le fichier de configuration log4j au même endroit afin que tout le monde puisse y accéder. Suivez les étapes.

  1. Créez un projet avec un nom et dans le dossier src / main / resources, conservez le fichier de configuration log4j.
  2. Créez un fichier jar qui doit contenir ce fichier de configuration log4j.
  3. Utilisez ce fichier jar créé partout où cela est nécessaire. Log4j utilisera automatiquement la configuration pour la journalisation souhaitée. Si vous le souhaitez, vous pouvez distribuer ce fichier jar à quiconque souhaite l'utiliser.

L'option ci-dessus est si vous ne souhaitez pas modifier le fichier de configuration.

Maintenant, s'il y a une situation où quelqu'un veut modifier le fichier de configuration. Dans ce cas, placez simplement la configuration dans n'importe quel chemin de classe du projet, c'est-à-dire dans le dossier de ressources. Tant que les fichiers jar log4j sont présents dans le chemin de classe et les fichiers de configuration. Il enregistrera tout.

Cependant, si vous le souhaitez, vous pouvez étendre les fonctionnalités de Log4j en passant la configuration en tant qu'objet. Vous pouvez vous référer ci-dessous au lien pour y accéder par programmation.

https://howtodoinjava.com/log4j/ comment-configurer-les-appenders-dans-log4j /


4 commentaires

Existe-t-il un autre moyen de ne pas coder en dur les chemins? La solution que vous suggérez est bonne si vous ne voulez pas changer définitivement le fichier de configuration de log4j. Je cherchais une substitution de chaîne dans eclipse, mais je ne sais pas comment utiliser ces variables à l'intérieur des classes.


Dans ce cas, il n'y a pas de codage en dur, il fait partie de ce fichier jar.


Mais la création de fichiers jar est une étape inutile, si chaque fois que le fichier de configuration change


C'est déjà le cas, ce que vous avez mis à jour dans votre réponse. fichiers log4j tout se trouve dans le dossier du projet (à l'intérieur de eclipse), je veux éviter de coder en dur les valeurs pour les chemins de fichiers restants et ce fichier sans définir la variable d'environnement.



0
votes

J'ai ajouté tous les chemins de fichiers et de dossiers dans le fichier de propriétés (exemple config.properties), puis je les ai utilisés dans la méthode testsetup par InputStream input = new FileInputStream ("Path to // config.properties"); Propriétés prop = nouvelles propriétés (); prop.load (entrée); System.setProperty ("log4j2.configurationFile", prop.getProperty ("log4j.path"));

De cette façon, tous les chemins de fichiers / dossiers peuvent être modifiés de l'extérieur et il n'est pas nécessaire de définir une variable d'environnement depuis l'intérieur du projet.


0 commentaires

0
votes

Paraphrasant un commentaire : < / p>

[Comment obtenir une valeur depuis] en dehors du programme Java, comme un fichier séparé, qui contient tous les autres chemins de fichiers?

Cela s'appelle un fichier de configuration .

Il s'agit souvent d'un fichier de propriétés, similaire à un fichier de configuration Log4j, mais il peut s'agir de n'importe quel type de fichier, par exemple XML, JSON, YAML, ...

Pour identifier un seul fichier de ce type, vous pouvez utiliser:

  • Une variable d'environnement (comme vous êtes actuellement)
  • Une propriété système (plus courante)
  • Un fichier spécifiquement nommé dans le répertoire courant
  • ...

Les entrées de ce fichier identifieront toutes les valeurs que vous voulez vraiment.

Par exemple, Spring, qui est un framework Java peuplé, recherchera des valeurs de configuration à de nombreux endroits. Voir 24. Configuration externalisée pour plus de détails, mais voici un résumé des plus courantes:

    1. Arguments de ligne de commande, par exemple java -jar MyApp.jar --foo = bar
    1. Propriétés du système Java, par exemple défini en utilisant -Dfoo = bar sur la ligne de commande
    1. Variables d'environnement du système d'exploitation, par exemple SET foo = bar (Windows) ou export foo = bar (Linux)
    1. Propriétés de l'application en dehors de votre fichier jar packagé, c'est-à-dire par rapport au répertoire actuel.
      Le nom et l'emplacement peuvent être remplacés sur la ligne de commande.
      • config/application.properties
      • config/application.yaml
      • application.properties
      • application.yaml

0 commentaires