{"id":20445,"date":"2023-08-16T19:42:29","date_gmt":"2023-08-16T17:42:29","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=20445"},"modified":"2023-08-16T19:42:59","modified_gmt":"2023-08-16T17:42:59","slug":"every-main-method-deserves-picocli","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=20445","title":{"rendered":"Every main method deserves picocli!"},"content":{"rendered":"<p>Picocli: Eine leistungsstarke Bibliothek f\u00fcr die Erstellung von Befehlszeilenanwendungen. Hier habe ich schon oft davon <a href=\"http:\/\/blog.wenzlaff.de\/?s=Picocli\" rel=\"noopener\" target=\"_blank\">berichtet<\/a>. Da es im Juni die <a href=\"https:\/\/picocli.info\/#_introduction\" rel=\"noopener\" target=\"_blank\">Version 4.7.4<\/a> gab, mal hier ein Beispiel dazu. <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2023\/08\/love-2.png\" alt=\"\" width=\"1920\" height=\"1080\" class=\"aligncenter size-full wp-image-20449\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2023\/08\/love-2.png 1920w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2023\/08\/love-2-300x169.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2023\/08\/love-2-1024x576.png 1024w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2023\/08\/love-2-768x432.png 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2023\/08\/love-2-1536x864.png 1536w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/p>\n<p>Die Entwicklung von Software, sei es in Form von Anwendungen oder Tools, erfordert oft die Integration von Befehlszeilenfunktionalit\u00e4t, um Benutzern eine effiziente Interaktion mit der Software zu erm\u00f6glichen. Eine der bemerkenswertesten Bibliotheken, die diese Aufgabe erleichtert, ist &#8222;<a href=\"https:\/\/picocli.info\/#_introduction\" rel=\"noopener\" target=\"_blank\">Picocli<\/a>&#8222;. Picocli ist eine Java-basierte Open-Source-Bibliothek, die Entwicklern dabei hilft, robuste und benutzerfreundliche Befehlszeilenanwendungen zu erstellen.<\/p>\n<p>Was ist Picocli? <!--more-->Picocli ist eine leistungsstarke Befehlszeilen-Parser-Bibliothek f\u00fcr Java-Anwendungen. Sie erm\u00f6glicht es Entwicklern, schnell und einfach Befehlszeilenanwendungen zu erstellen, die komplexe Optionen, Argumente und Unterbefehle unterst\u00fctzen. Die Bibliothek zeichnet sich durch ihre Benutzerfreundlichkeit, Flexibilit\u00e4t und Erweiterbarkeit aus.<\/p>\n<p>Hier mal ein Beispiel:<\/p>\n<pre class=\"lang:default decode:true \" >package de.wenzlaff.twgraph;\r\n\r\nimport java.util.concurrent.Callable;\r\n\r\nimport org.apache.logging.log4j.LogManager;\r\nimport org.apache.logging.log4j.Logger;\r\n\r\nimport picocli.CommandLine;\r\nimport picocli.CommandLine.Command;\r\nimport picocli.CommandLine.Option;\r\n\r\n\/**\r\n * Komandozeile f\u00fcr das TWGraph Programm.\r\n * \r\n * &lt;pre&gt;\r\nUsage: TWGraph [-ah] -o=&lt;dateiName&gt; -p=&lt;projektDir&gt;\r\nProgramm zur Erzeugung von Graphen.\r\n  -a, --[no-]applet   Schaltet das Applet aus -a=false\r\n  -h, --help          Zeigt die Hilfe an und beendet das Programm\r\n  -o, --outputfilename=&lt;dateiName&gt;\r\n                      Der Output Dateiname f\u00fcr die Abh\u00e4ngigkeiten\r\n  -p, --projektverzeichnis=&lt;projektDir&gt;\r\n                      Der Pfad zum Projektverzeichnis\r\nThomas Wenzlaff\r\nhttp:\/\/www.wenzlaff.info\r\nCopyright (c) 2023 Thomas Wenzlaff\r\n * &lt;\/pre&gt;\r\n *\r\n * @author Thomas Wenzlaff\r\n *\/\r\n@Command(name = \"TWGraph\", mixinStandardHelpOptions = true, version = \"TWGraph 1.0.0\", description = \"Programm zur Erzeugung von Graphen.\", showDefaultValues = true, footer = {\r\n\t\t\"@|fg(green) Thomas Wenzlaff|@\", \"@|fg(red),bold http:\/\/www.wenzlaff.info|@\", \"@|fg(red),bold Copyright (c) 2023 Thomas Wenzlaff|@\" })\r\npublic class TWGraphCmd implements Callable&lt;Integer&gt; {\r\n\r\n\tprivate static final Logger LOG = LogManager.getLogger(TWGraphCmd.class);\r\n\r\n\t@Option(names = { \"-p\", \"--projektverzeichnis\" }, description = \"Der Pfad zum Projektverzeichnis\", required = true)\r\n\tprivate String projektDir;\r\n\r\n\t@Option(names = { \"-o\", \"--outputfilename\" }, description = \"Der Output Dateiname f\u00fcr die Abh\u00e4ngigkeiten\", required = true)\r\n\tprivate String dateiName;\r\n\r\n\t@Option(names = { \"-a\", \"--applet\" }, description = \"Schaltet das Applet aus -a=false\", negatable = true, defaultValue = \"true\", fallbackValue = \"true\")\r\n\tprivate boolean isApplet;\r\n\r\n\t@Option(names = { \"-h\", \"--help\" }, usageHelp = true, description = \"Zeigt die Hilfe an und beendet das Programm\")\r\n\tboolean help;\r\n\r\n\tpublic static void main(String[] args) {\r\n\r\n\t\tCommandLine cmd = new CommandLine(new TWGraphCmd());\r\n\t\tcmd.execute(args);\r\n\t}\r\n\r\n\t@Override\r\n\tpublic Integer call() throws Exception {\r\n\t\tLOG.info(\"TWGraph ... Starte mit Projektverzeichnis {} und Outputdatei: {} Applet Start: {}\", projektDir, dateiName, isApplet);\r\n\r\n\t\tString[] args = { projektDir, dateiName, String.valueOf(isApplet) };\r\n\t\tTWGraph.main(args);\r\n\t\treturn 0;\r\n\t}\r\n}\r\n<\/pre>\n<p>Hauptmerkmale von Picocli:<\/p>\n<p><strong>Deklarative Syntax<\/strong>: Picocli verwendet eine deklarative Syntax, um Befehlszeilenoptionen und -argumente zu definieren. Dies erleichtert die Erstellung und Wartung von Befehlszeilenanwendungen, da die Konfiguration direkt im Quellcode erfolgt.<\/p>\n<p><strong>Automatische Generierung von Hilfe<\/strong>: Picocli generiert automatisch detaillierte Hilfeinformationen f\u00fcr Ihre Befehlszeilenanwendung, einschlie\u00dflich einer \u00dcbersicht \u00fcber Optionen, Argumente und Unterbefehle. Dies erleichtert es den Benutzern, die Anwendung zu verstehen und korrekt zu verwenden. Siehe oben.<\/p>\n<p><strong>Unterst\u00fctzung f\u00fcr Subkommandos<\/strong>: Komplexe Befehlszeilenanwendungen erfordern oft hierarchische Strukturen. Picocli erm\u00f6glicht die Definition von Unterbefehlen, die jeweils ihre eigenen Optionen und Argumente haben k\u00f6nnen.<\/p>\n<p><strong>Validierung und Konvertierung<\/strong>: Picocli bietet integrierte Unterst\u00fctzung f\u00fcr die Validierung und Konvertierung von Befehlszeilenargumenten in Java-Typen. Dies erleichtert die Verarbeitung von Eingaben und minimiert Fehler.<\/p>\n<p><strong>Anpassbare Ausgabe<\/strong>: Entwickler k\u00f6nnen das Ausgabeformat der Hilfe und Fehlermeldungen anpassen, um sicherzustellen, dass die Benutzeroberfl\u00e4che konsistent und benutzerfreundlich ist.<\/p>\n<p><strong>Annotationen-basiert<\/strong>: Picocli erm\u00f6glicht die Verwendung von Annotationen, um Befehlszeilenoptionen, Argumente und Unterbefehle zu definieren. Dies f\u00f6rdert die Lesbarkeit und erleichtert die Integration in bestehenden Code.<\/p>\n<p>Wie verwende ich Picocli? In die pom.xml erg\u00e4nzen:<\/p>\n<pre class=\"minimize:true lang:yaml decode:true \" >&lt;dependency&gt;\r\n\t\t\t&lt;groupId&gt;info.picocli&lt;\/groupId&gt;\r\n\t\t\t&lt;artifactId&gt;picocli&lt;\/artifactId&gt;\r\n\t\t\t&lt;version&gt;4.7.4&lt;\/version&gt;\r\n\t\t&lt;\/dependency&gt;<\/pre>\n<p>Picocli ist eine bemerkenswerte Bibliothek, die die Erstellung von Befehlszeilenanwendungen in Java erheblich vereinfacht. Mit ihren leistungsstarken Funktionen, der deklarativen Syntax und der Unterst\u00fctzung f\u00fcr Subkommandos erm\u00f6glicht sie es Entwicklern, robuste und benutzerfreundliche Tools zu erstellen. Ob f\u00fcr die Entwicklung von Tools, die Systemadministration, Datenverarbeitung oder andere Aufgaben erleichtern, Picocli ist eine wertvolle Erg\u00e4nzung im Werkzeugkasten eines Java-Entwicklers. Also jede main Methode sollte <a href=\"https:\/\/picocli.info\/#_introduction\" rel=\"noopener\" target=\"_blank\">picocli<\/a> nutzen, um nicht zu sagen&#8230;<\/p>\n<pre class=\"lang:default decode:true \" >\r\nIn der Welt des Codes, so stark und smart,\r\nEin Tool tritt hervor, spielt eine gro\u00dfe Part.\r\nPicocli sein Name, Java sei sein Herz,\r\nMit Befehlszeilenkraft, es gibt keinen Schmerz.\r\n\r\nF\u00fcr Befehlszeilenhelden, f\u00fcr Entwickler wie dich,\r\nPicocli ist die Wahl, nie mehr ein Kompromiss.\r\nMit Eleganz und St\u00e4rke, es begleitet dich weit,\r\nDas Java Commandline Tool, f\u00fcr jede Zeit.\r\n\r\n-Thomas Wenzlaff<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Picocli: Eine leistungsstarke Bibliothek f\u00fcr die Erstellung von Befehlszeilenanwendungen. Hier habe ich schon oft davon berichtet. Da es im Juni die Version 4.7.4 gab, mal hier ein Beispiel dazu. Die Entwicklung von Software, sei es in Form von Anwendungen oder Tools, erfordert oft die Integration von Befehlszeilenfunktionalit\u00e4t, um Benutzern eine effiziente Interaktion mit der Software &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=20445\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eEvery main method deserves picocli!\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[220,5,3897,79,7],"tags":[3590,2178,5685,4111,68,4902,5686,256],"class_list":["post-20445","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-java","category-java-programmierung","category-programmierung","category-tools","tag-commandline","tag-java","tag-kommandozeilen-tool","tag-main","tag-methode","tag-picocli","tag-picocli-a-mighty-tiny-command-line-interface","tag-tool"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/20445","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=20445"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/20445\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=20445"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=20445"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=20445"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}