{"id":275,"date":"2018-07-08T12:49:08","date_gmt":"2018-07-08T11:49:08","guid":{"rendered":"http:\/\/sizious.com\/fr\/?p=275"},"modified":"2018-09-26T11:18:55","modified_gmt":"2018-09-26T10:18:55","slug":"apache-maven-comment-extraire-les-valeurs-des-noeuds-xml-depuis-le-fichier-pom-xml-en-pur-batch","status":"publish","type":"post","link":"https:\/\/sizious.com\/fr\/2018\/07\/08\/apache-maven-comment-extraire-les-valeurs-des-noeuds-xml-depuis-le-fichier-pom-xml-en-pur-batch\/","title":{"rendered":"Apache Maven : Comment extraire les valeurs des noeuds XML depuis le fichier pom.xml (en pur batch !)"},"content":{"rendered":"<p>Si vous \u00eates un d\u00e9veloppeur <strong>Java<\/strong> vous connaissez tr\u00e8s certainement <a href=\"https:\/\/maven.apache.org\/\" target=\"_blank\" rel=\"noopener\">Apache Maven<\/a>, qui est \u00e0 peu pr\u00e8s l&rsquo;\u00e9quivalent de <span class=\"lang:default decode:true crayon-inline \">Make<\/span>\u00a0mais pour le monde <strong>Java<\/strong>.<\/p>\n<p>Il y a quelques jours j&rsquo;ai d\u00fb r\u00e9fl\u00e9chir \u00e0 une m\u00e9thode d&rsquo;extraction des valeurs de certains n\u0153uds du fichier <span class=\"lang:default decode:true crayon-inline \">pom.xml<\/span>\u00a0pour automatiser certaines op\u00e9rations. Par exemple, j&rsquo;ai voulu extraire les valeurs de <span class=\"lang:default decode:true crayon-inline\">groupId<\/span>, <span class=\"lang:default decode:true crayon-inline \">artifactId<\/span> et <span class=\"lang:default decode:true crayon-inline \">version<\/span> depuis un projet <strong>Maven<\/strong>, c&rsquo;est-\u00e0-dire depuis le fichier <span class=\"lang:default decode:true crayon-inline\">pom.xml<\/span>.<\/p>\n<p>J&rsquo;ai finalement cr\u00e9\u00e9 une solution en pur batch <strong>Windows<\/strong> pour le faire, et j&rsquo;ai appel\u00e9 ce petit outil <strong>POM Tool<\/strong>.<\/p>\n<p>Et voici son code source :<\/p>\n<pre class=\"\">@echo off\r\nsetlocal EnableDelayedExpansion\r\nset POM_TOOL_VERSION=20180914\r\n\r\nrem Parameters\r\nset MAVEN_POM_INPUT_TAG=%1\r\nset MAVEN_POM_FILE=pom.xml\r\nif \"%2\" neq \"\" set MAVEN_POM_FILE=%2\r\n\r\nrem Check input parameters\r\nif \"%MAVEN_POM_INPUT_TAG%\"==\"\" goto help\r\nif \"%MAVEN_POM_FILE%\"==\"\" goto error_pom_not_found\r\nif not exist %MAVEN_POM_FILE% goto error_pom_not_found\r\n\r\nrem Compute start\/end positions to extract the value from the XML tag\r\ncall:strlen %MAVEN_POM_INPUT_TAG%\r\nset \/a TAG_BEGIN=%_strlen% + 2\r\nset \/a TAG_END=(%TAG_BEGIN% + 1) * -1\r\n\r\nrem Perform the XML tag value extraction\r\ncall:extractxml %MAVEN_POM_INPUT_TAG% %TAG_BEGIN% %TAG_END%\r\nif \"%_extractxml%\"==\"\" goto error_extraction_failed\r\necho %_extractxml%\r\ngoto:eof\r\n\r\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\r\n\r\nrem ---\r\nrem Display help message\r\nrem ---\r\n:help\r\ncall:banner\r\necho Usage: %~n0 ^&lt;xml_tag^&gt; [pom_file]\r\necho.\r\necho Example: %~n0 version - will return artifact version\r\necho          %~n0 groupId - will return artifact groupId\r\ngoto:eof\r\n\r\nrem ---\r\nrem Error: The requested tag was not found\r\nrem ---\r\n:error_extraction_failed\r\ncall:banner\r\necho Error: The tag \"%MAVEN_POM_INPUT_TAG%\" wasn't found in the \"%MAVEN_POM_FILE%\" file.\r\ngoto:eof\r\n\r\nrem ---\r\nrem Error: The Maven POM file wasn't found\r\nrem ---\r\n:error_pom_not_found\r\ncall:banner\r\necho Error: The \"%MAVEN_POM_FILE%\" file wasn't found.\r\ngoto:eof\r\n\r\nrem ---\r\nrem Function: banner\r\nrem Used to display the tool banner\r\nrem ---\r\n:banner\r\necho POM Tool - Ver. %POM_TOOL_VERSION%\r\necho.\r\ngoto:eof\r\n\r\nrem ---\r\nrem Function: extractxml \r\nrem Used to parse %MAVEN_POM_FILE% for extracting tags value.\r\nrem Usage: call:extractxml %param% where %param% is the tag to search.\r\nrem ---\r\n:extractxml\r\nsetlocal\r\nset _extracted_xml_result=\r\nset _token=^&lt;%~1^&gt;\r\nset _begin=%~2\r\nset _end=%~3\r\nfor \/f \"tokens=*\" %%a in (%MAVEN_POM_FILE%) do (\r\n\tset row=%%a\r\n\tif \/i \"!row:%_token%=!\"==\"!row!\" (echo NOP &gt; nul) else (\r\n\t\tset _extracted_xml_result=!row!\r\n\t\tif \/i \"!_extracted_xml_result!\" neq \"\" goto extractxml_endloop\r\n\t)\r\n)\r\n:extractxml_endloop\r\nset \"_final=%_extracted_xml_result%\"\r\nif \"%_final%\" neq \"\" call set _final=%%_final:~%_begin%,%_end%%%\r\n(endlocal\r\n\tif \"%~1\" neq \"\" set \"_extractxml=%_final%\"\r\n)\r\ngoto:eof\r\n\r\nrem ---\r\nrem Function: strlen\r\nrem Get the length of a string\r\nrem Thanks to: SS64 (https:\/\/ss64.com\/nt\/syntax-strlen.html)\r\nrem ---\r\n:strlen\r\nsetlocal\r\nset _str=%~1\r\n\r\nrem Remove any quotes\r\nset _str=%_str:\"=%\r\n\r\nrem Test if empty\r\nif not defined _str echo endlocal &amp; set _strlen=0&amp;goto:eof\r\n\r\nset MAX_STRING_LENGTH=256\r\nfor \/l %%g in (0,1,!MAX_STRING_LENGTH!) do (\r\n\tREM extract one character\r\n\tset \"_char=!_str:~%%g,1!\"\r\n\tREM if _char is empty we are at the end of the string\r\n\tif not defined _char endlocal &amp; set _strlen=%%g&amp; goto:eof\r\n)\r\ngoto:eof\r\n<\/pre>\n<p>Vous devez simplement copier\/coller ce code source dans un nouveau fichier texte et l&rsquo;appeler <span class=\"lang:default decode:true crayon-inline\">pomtool.cmd<\/span>.<\/p>\n<p>L&rsquo;utilisation est tr\u00e8s simple :<\/p>\n<pre class=\"lang:batch decode:true\" title=\"Exemple d'utilisation de POM Tool\">pomtool artifactId c:\\temp\\my-maven-project\\pom.xml<\/pre>\n<p>Ceci va vous donner la valeur du n\u0153ud <span class=\"lang:default decode:true crayon-inline \">artifactId<\/span>\u00a0du fichier\u00a0<span class=\"lang:default decode:true crayon-inline \">c:\\temp\\my-maven-project\\pom.xml<\/span> !<\/p>\n<p>Bien entendu vous pouvez appeler <strong>POM Tool<\/strong> depuis un autre fichier batch, par exemple :<\/p>\n<pre class=\"lang:batch decode:true \" title=\"Exemple d'utilisation de POM Tool depuis un autre fichier Batch\">@echo off\r\nfor \/f \"tokens=*\" %%i in ('pomtool description c:\\my\\project\\pom.xml') do set \"PROJECT_NAME=%%i\"\r\necho %PROJECT_NAME%\r\npause<\/pre>\n<p>Dans ce cas, la variable <span class=\"lang:default decode:true crayon-inline \">%PROJECT_NAME%<\/span>\u00a0contiendra la sortie du programme <strong>POM Tool<\/strong>, dans cet exemple il s&rsquo;agit de la valeur du n\u0153ud description du fichier <span class=\"lang:default decode:true crayon-inline \">pom.xml<\/span> ! \ud83d\ude42<\/p>\n<p>N&rsquo;h\u00e9sitez pas \u00e0 commenter si vous avez des questions ! \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Si vous \u00eates un d\u00e9veloppeur Java vous connaissez tr\u00e8s certainement Apache Maven, qui est \u00e0 peu pr\u00e8s l&rsquo;\u00e9quivalent de Make\u00a0mais pour le monde Java. Il y a quelques jours j&rsquo;ai d\u00fb r\u00e9fl\u00e9chir \u00e0 une m\u00e9thode d&rsquo;extraction des valeurs de certains n\u0153uds du fichier pom.xml\u00a0pour automatiser certaines op\u00e9rations. Par exemple, j&rsquo;ai voulu extraire les valeurs de\u2026 <span class=\"read-more\"><a href=\"https:\/\/sizious.com\/fr\/2018\/07\/08\/apache-maven-comment-extraire-les-valeurs-des-noeuds-xml-depuis-le-fichier-pom-xml-en-pur-batch\/\">Lire la suite &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[5],"tags":[],"class_list":["post-275","post","type-post","status-publish","format-standard","hentry","category-code"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/sizious.com\/fr\/wp-json\/wp\/v2\/posts\/275","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sizious.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sizious.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sizious.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sizious.com\/fr\/wp-json\/wp\/v2\/comments?post=275"}],"version-history":[{"count":6,"href":"https:\/\/sizious.com\/fr\/wp-json\/wp\/v2\/posts\/275\/revisions"}],"predecessor-version":[{"id":290,"href":"https:\/\/sizious.com\/fr\/wp-json\/wp\/v2\/posts\/275\/revisions\/290"}],"wp:attachment":[{"href":"https:\/\/sizious.com\/fr\/wp-json\/wp\/v2\/media?parent=275"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sizious.com\/fr\/wp-json\/wp\/v2\/categories?post=275"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sizious.com\/fr\/wp-json\/wp\/v2\/tags?post=275"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}