Gewusst wie: überschreiben der Datei mit den Eigenschaften Wert über Kommandozeilen-Argumente?
Ich habe eine property-Datei, die wie folgt ist -
hostName=machineA.domain.host.com
emailFrom=tester@host.com
emailTo=world@host.com
emailCc=hello@host.com
Und lese ich jetzt die oben genannten property-Datei aus meinem Java-Programm -
public class FileReaderTask {
private static String hostName;
private static String emailFrom;
private static String emailTo;
private static String emailCc;
private static final String configFileName = "config.properties";
private static final Properties prop = new Properties();
public static void main(String[] args) {
readConfig(arguments);
}
private static void readConfig(String[] args) throws FileNotFoundException, IOException {
if (!TestUtils.isEmpty(args) && args.length != 0) {
prop.load(new FileInputStream(args[0]));
} else {
prop.load(FileReaderTask.class.getClassLoader().getResourceAsStream(configFileName));
}
hostName = prop.getProperty("hostName").trim();
emailFrom = prop.getProperty("emailFrom").trim();
emailTo = prop.getProperty("emailTo").trim();
emailCc = prop.getProperty("emailCc").trim();
}
}
Meisten der Zeit, ich werde mit meinem oben genannten Programm über die Befehlszeile als runnable jar wie diese -
java -jar abc.jar config.properties
Meine Fragen sind -
- Gibt es eine Möglichkeit, die wir außer Kraft setzen können, die oben genannten Attribute in der property-Datei über die Befehlszeile ohne Sie zu berühren Sie die Datei, wenn benötigt? Da will ich nicht ändern, meine config.Eigenschaften-Datei immer, wenn ich ändern müssen Attribute Wert? Ist dies möglich?
Sowas soll override-Wert für den Hostnamen in der Datei?
java -jar abc.jar config.properties hostName=machineB.domain.host.com
- Und auch gibt es keine Möglichkeit zum hinzufügen von
--help
während der Ausführung derabc.jar
können, erzählen Sie uns mehr darüber, wie Sie die jar-Datei und was bewirkt jede Eigenschaft bedeutet und wie Sie zu nutzen? Ich habe gesehen--help
laufen, während die meisten C++ - executable-oder Unix-Zeug also nicht sicher, wie wir das tun können, die gleiche Sache in Java?
Benötige ich, um die Kommandozeilen-parser für diese in Java zu erreichen, die beiden Dinge?
- Das ist, wenn Sie machen verwenden der
String[] args
variable übergebenpublic static void main
Methode. - Vielen Dank für die Anregung. Können Sie ein Beispiel geben, wie ich dies tun? Ich muss auch hinzufügen
--help
Funktionalität, durch die jemand bekommen kann, zu wissen, wie zum ausführen dieser jar und was sind die verschiedenen config-Parameter und was bedeuten Sie im Allgemeinen? Wir benutzen müssen, um alle Kommandozeilen-parser wie JCommander? - Sie könnten dies manuell tun, oder verwenden Sie eine Bibliothek, wie, dass. Die Entscheidung ist bis zu Ihnen (oder Ihrem team).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn die einzigen Dinge, die Sie haben auf Ihrer Kommandozeile sind Dinge wie:
hostName=machineB.domain.host.com
und nicht irgendwelche anderen Typen der Argumente, dann können Sie vereinfachen Ihre commandline handling einiges:Erste, join alle Kommandozeilen-Argumente mit newlines, als ob Sie eine neue Konfigurationsdatei:
nun, Sie haben zwei property-Quellen, wird Ihre Datei, und diese Zeichenfolge. Sie können laden Sie Sie beide in einem einzigen Eigenschaften, die Instanz, die mit einer version überschreiben, die anderen: