{"id":14029,"date":"2020-02-03T03:56:53","date_gmt":"2020-02-03T02:56:53","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=14029"},"modified":"2020-02-02T19:51:08","modified_gmt":"2020-02-02T18:51:08","slug":"ein-eigenes-maven-plugin-in-15-minuten-erstellen-mit-doku-in-6-schritten","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=14029","title":{"rendered":"Ein eigenes Maven-Plugin in 15 Minuten inklusive Dokumentation erstellen"},"content":{"rendered":"<p>Ein eigenes Maven-Plugin zu erstellen ist nicht schwer und ist schnell gemacht. Wir wollen ein Plugin welches einen Verzeichnis Inhalt mit <strong>ls -la<\/strong> in das Log schreibt erstellen. Es k\u00f6nnen aber auch andere Linux Befehle \u00fcbergeben werden. Hier nun die 6 Schritte mit den Vorlagen die mind. n\u00f6tig sind.<br \/>\n<figure id=\"attachment_14028\" aria-describedby=\"caption-attachment-14028\" style=\"width: 1920px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/gelbe-blume-scaled.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/gelbe-blume-scaled.jpg\" alt=\"Freut euch immer\" width=\"1920\" height=\"2560\" class=\"size-full wp-image-14028\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/gelbe-blume-scaled.jpg 1920w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/gelbe-blume-225x300.jpg 225w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/gelbe-blume-768x1024.jpg 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/gelbe-blume-1152x1536.jpg 1152w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/gelbe-blume-1536x2048.jpg 1536w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><figcaption id=\"caption-attachment-14028\" class=\"wp-caption-text\">Always rejoice, mit freundlicher Genehmigung <a href=\"http:\/\/art.wenzlaff.de\/\" rel=\"noopener noreferrer\" target=\"_blank\">meines Lieblingsk\u00fcnstlers<\/a><\/figcaption><\/figure><\/p>\n<p>1. Wir legen in Eclipse ein neue Maven Projekt mit Java 1.8 an. mit Artifact Id und Group Id <strong>de.wenzlaff.command.maven.plugin<\/strong><\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/maven-plugin.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/maven-plugin.png\" alt=\"\" width=\"1408\" height=\"1032\" class=\"aligncenter size-full wp-image-14030\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/maven-plugin.png 1408w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/maven-plugin-300x220.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/maven-plugin-1024x751.png 1024w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/maven-plugin-768x563.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n<p>2. In der pom.xml f\u00fcgen wir die folgenden Abh\u00e4ngikeiten hinzu:<!--more--><\/p>\n<pre class=\"lang:xhtml decode:true \" >&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;project xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\"\r\n\txmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\r\n\txsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 https:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd\"&gt;\r\n\t&lt;modelVersion&gt;4.0.0&lt;\/modelVersion&gt;\r\n\r\n\t&lt;groupId&gt;de.wenzlaff.command.maven.plugin&lt;\/groupId&gt;\r\n\t&lt;artifactId&gt;de.wenzlaff.command.maven.plugin&lt;\/artifactId&gt;\r\n\t&lt;version&gt;1.0-SNAPSHOT&lt;\/version&gt;\r\n\t&lt;packaging&gt;maven-plugin&lt;\/packaging&gt;\r\n\r\n\t&lt;name&gt;Command Maven Plugin&lt;\/name&gt;\r\n\t&lt;description&gt;Command Maven Plugin&lt;\/description&gt;\r\n\r\n\t&lt;organization&gt;\r\n\t\t&lt;name&gt;Thomas Wenzlaff&lt;\/name&gt;\r\n\t\t&lt;url&gt;https:\/\/www.wenzlaff.info&lt;\/url&gt;\r\n\t&lt;\/organization&gt;\r\n\r\n\t&lt;prerequisites&gt;\r\n\t\t&lt;maven&gt;3.5.0&lt;\/maven&gt;\r\n\t&lt;\/prerequisites&gt;\r\n\r\n\t&lt;properties&gt;\r\n\t\t&lt;maven.compiler.source&gt;1.8&lt;\/maven.compiler.source&gt;\r\n\t\t&lt;maven.compiler.target&gt;1.8&lt;\/maven.compiler.target&gt;\r\n\t\t&lt;project.build.sourceEncoding&gt;UTF-8&lt;\/project.build.sourceEncoding&gt;\r\n\t\t&lt;project.reporting.outputEncoding&gt;UTF-8&lt;\/project.reporting.outputEncoding&gt;\r\n\t&lt;\/properties&gt;\r\n\r\n\t&lt;reporting&gt;\r\n\t\t&lt;plugins&gt;\r\n\t\t\t&lt;plugin&gt;\r\n\t\t\t\t&lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;\r\n\t\t\t\t&lt;artifactId&gt;maven-plugin-plugin&lt;\/artifactId&gt;\r\n\t\t\t\t&lt;reportSets&gt;\r\n\t\t\t\t\t&lt;reportSet&gt;\r\n\t\t\t\t\t\t&lt;reports&gt;\r\n\t\t\t\t\t\t\t&lt;report&gt;report&lt;\/report&gt;\r\n\t\t\t\t\t\t&lt;\/reports&gt;\r\n\t\t\t\t\t&lt;\/reportSet&gt;\r\n\t\t\t\t&lt;\/reportSets&gt;\r\n\t\t\t&lt;\/plugin&gt;\r\n\t\t&lt;\/plugins&gt;\r\n\t&lt;\/reporting&gt;\r\n\r\n\t&lt;dependencies&gt;\r\n\t\t&lt;dependency&gt;\r\n\t\t\t&lt;groupId&gt;org.apache.maven&lt;\/groupId&gt;\r\n\t\t\t&lt;artifactId&gt;maven-plugin-api&lt;\/artifactId&gt;\r\n\t\t\t&lt;version&gt;3.6.3&lt;\/version&gt;\r\n\t\t\t&lt;scope&gt;provided&lt;\/scope&gt;\r\n\t\t&lt;\/dependency&gt;\r\n\t\t&lt;dependency&gt;\r\n\t\t\t&lt;groupId&gt;org.apache.maven&lt;\/groupId&gt;\r\n\t\t\t&lt;artifactId&gt;maven-core&lt;\/artifactId&gt;\r\n\t\t\t&lt;version&gt;3.6.0&lt;\/version&gt;\r\n\t\t\t&lt;scope&gt;provided&lt;\/scope&gt;\r\n\t\t&lt;\/dependency&gt;\r\n\t\t&lt;dependency&gt;\r\n\t\t\t&lt;groupId&gt;org.apache.maven.plugin-tools&lt;\/groupId&gt;\r\n\t\t\t&lt;artifactId&gt;maven-plugin-annotations&lt;\/artifactId&gt;\r\n\t\t\t&lt;version&gt;3.5&lt;\/version&gt;\r\n\t\t\t&lt;scope&gt;provided&lt;\/scope&gt;\r\n\t\t&lt;\/dependency&gt;\r\n\t&lt;\/dependencies&gt;\r\n\r\n\t&lt;build&gt;\r\n\t\t&lt;pluginManagement&gt;\r\n\t\t\t&lt;plugins&gt;\r\n\t\t\t\t&lt;plugin&gt;\r\n\t\t\t\t\t&lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;\r\n\t\t\t\t\t&lt;artifactId&gt;maven-plugin-plugin&lt;\/artifactId&gt;\r\n\t\t\t\t\t&lt;version&gt;3.6.0&lt;\/version&gt;\r\n\t\t\t\t&lt;\/plugin&gt;\r\n\t\t\t\t&lt;plugin&gt;\r\n\t\t\t\t\t&lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;\r\n\t\t\t\t\t&lt;artifactId&gt;maven-site-plugin&lt;\/artifactId&gt;\r\n\t\t\t\t\t&lt;version&gt;3.8.2&lt;\/version&gt;\r\n\t\t\t\t&lt;\/plugin&gt;\r\n\t\t\t\t&lt;!--This plugin's configuration is used to store Eclipse m2e settings \r\n\t\t\t\t\tonly. It has no influence on the Maven build itself. --&gt;\r\n\t\t\t\t&lt;plugin&gt;\r\n\t\t\t\t\t&lt;groupId&gt;org.eclipse.m2e&lt;\/groupId&gt;\r\n\t\t\t\t\t&lt;artifactId&gt;lifecycle-mapping&lt;\/artifactId&gt;\r\n\t\t\t\t\t&lt;version&gt;1.0.0&lt;\/version&gt;\r\n\t\t\t\t\t&lt;configuration&gt;\r\n\t\t\t\t\t\t&lt;lifecycleMappingMetadata&gt;\r\n\t\t\t\t\t\t\t&lt;pluginExecutions&gt;\r\n\t\t\t\t\t\t\t\t&lt;pluginExecution&gt;\r\n\t\t\t\t\t\t\t\t\t&lt;pluginExecutionFilter&gt;\r\n\t\t\t\t\t\t\t\t\t\t&lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;\r\n\t\t\t\t\t\t\t\t\t\t&lt;artifactId&gt;maven-plugin-plugin&lt;\/artifactId&gt;\r\n\t\t\t\t\t\t\t\t\t\t&lt;versionRange&gt;[3.6.0,)&lt;\/versionRange&gt;\r\n\t\t\t\t\t\t\t\t\t\t&lt;goals&gt;\r\n\t\t\t\t\t\t\t\t\t\t\t&lt;goal&gt;descriptor&lt;\/goal&gt;\r\n\t\t\t\t\t\t\t\t\t\t&lt;\/goals&gt;\r\n\t\t\t\t\t\t\t\t\t&lt;\/pluginExecutionFilter&gt;\r\n\t\t\t\t\t\t\t\t\t&lt;action&gt;\r\n\t\t\t\t\t\t\t\t\t\t&lt;ignore&gt;&lt;\/ignore&gt;\r\n\t\t\t\t\t\t\t\t\t&lt;\/action&gt;\r\n\t\t\t\t\t\t\t\t&lt;\/pluginExecution&gt;\r\n\t\t\t\t\t\t\t&lt;\/pluginExecutions&gt;\r\n\t\t\t\t\t\t&lt;\/lifecycleMappingMetadata&gt;\r\n\t\t\t\t\t&lt;\/configuration&gt;\r\n\t\t\t\t&lt;\/plugin&gt;\r\n\t\t\t&lt;\/plugins&gt;\r\n\t\t&lt;\/pluginManagement&gt;\r\n\t&lt;\/build&gt;\r\n&lt;\/project&gt;\r\n<\/pre>\n<p>3. Dann brauchen wir noch ein Mojo. Mit einem Parameter, der default das <strong>ls -la<\/strong> ausf\u00fchrt.<\/p>\n<p>Dazu die folgende Klasse im Package <strong>de.wenzlaff.command.maven.plugin<\/strong> anlegen:<\/p>\n<pre class=\"lang:java decode:true \" >package de.wenzlaff.command.maven.plugin;\r\n\r\nimport java.io.BufferedReader;\r\nimport java.io.IOException;\r\nimport java.io.InputStreamReader;\r\n\r\nimport org.apache.maven.plugin.AbstractMojo;\r\nimport org.apache.maven.plugin.MojoExecutionException;\r\nimport org.apache.maven.plugin.MojoFailureException;\r\nimport org.apache.maven.plugins.annotations.LifecyclePhase;\r\nimport org.apache.maven.plugins.annotations.Mojo;\r\nimport org.apache.maven.plugins.annotations.Parameter;\r\nimport org.apache.maven.project.MavenProject;\r\n\r\n\/**\r\n * Ein Kommando-Mojo.\r\n * \r\n * @author Thomas Wenzlaff\r\n *\r\n *\/\r\n@Mojo(name = \"info\", defaultPhase = LifecyclePhase.INITIALIZE)\r\npublic class CommandMojo extends AbstractMojo {\r\n\r\n\t\/**\r\n\t * Der command Parameter. Wenn er nicht angegeben wird, wird default: ls -la\r\n\t * verwendet.\r\n\t * \r\n\t * Es kann aber auch noch ein Verzeichnis \u00fcbergeben werden, das \u00fcberwacht werden\r\n\t * soll. Z.B.\r\n\t * \r\n\t * mvn de.wenzlaff.dir.maven.plugin:de.wenzlaff.command.maven.plugin:info\r\n\t * -Dcommand=\"ls -la \/Users\/thomaswenzlaff\"\r\n\t * \r\n\t *\/\r\n\t@Parameter(property = \"command\", defaultValue = \"ls -la\")\r\n\tprivate String command;\r\n\r\n\t@Parameter(property = \"project\", readonly = true)\r\n\tprivate MavenProject project;\r\n\r\n\tpublic void execute() throws MojoExecutionException, MojoFailureException {\r\n\r\n\t\tgetLog().info(\"Thomas sein Command-Plugin in Version: \" + project.getVersion() + \", ArtifactId: \" + project.getArtifactId());\r\n\t\tgetLog().info(\"F\u00fchre das Kommando aus: \" + command);\r\n\r\n\t\tString commandoErgebnis = getCommand(command);\r\n\r\n\t\tgetLog().info(commandoErgebnis);\r\n\t}\r\n\r\n\tpublic String getCommand(String command) throws MojoExecutionException {\r\n\r\n\t\tString s = null;\r\n\t\tStringBuilder buffer = new StringBuilder(\"\\n\");\r\n\r\n\t\ttry {\r\n\t\t\tProcess p = Runtime.getRuntime().exec(command);\r\n\r\n\t\t\ttry (BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()))) {\r\n\r\n\t\t\t\twhile ((s = stdInput.readLine()) != null) {\r\n\t\t\t\t\tbuffer.append(s);\r\n\t\t\t\t\tbuffer.append(\"\\n\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\ttry (BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()))) {\r\n\r\n\t\t\t\twhile ((s = stdError.readLine()) != null) {\r\n\t\t\t\t\tbuffer.append(\"Error: \" + s);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} catch (IOException e) {\r\n\t\t\tthrow new MojoExecutionException(\"Fehler beim ausf\u00fchren des Kommandos: '\" + command, e);\r\n\t\t}\r\n\r\n\t\treturn buffer.toString();\r\n\r\n\t}\r\n}\r\n<\/pre>\n<p>Die Klasse <strong>CommandMojo<\/strong> wird von dem <strong>AbstractMojo<\/strong> abgeleitet. Es muss nur eine Methode (<strong>execute<\/strong>) implementiert werden. Das Projekt sieht nun so aus:<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/plugin-workspace.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/plugin-workspace.png\" alt=\"\" width=\"802\" height=\"836\" class=\"aligncenter size-full wp-image-14033\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/plugin-workspace.png 802w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/plugin-workspace-288x300.png 288w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/plugin-workspace-768x801.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n<p>4. Jetzt k\u00f6nnen wir das Plugin schon bauen mit: <strong>mvn clean install<\/strong><\/p>\n<p>5. Das Plugin testen wir auf der Kommandozeile, indem wir in das Projektverzeichnis wechseln (da wo die pom.xml liegt) und das info Goal aufrufen:<\/p>\n<p><strong>mvn de.wenzlaff.command.maven.plugin:de.wenzlaff.command.maven.plugin:info<\/strong><\/p>\n<p>Es wird nun das Verzeichnis augegeben und im log geschrieben:<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/plugin-test.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/plugin-test.png\" alt=\"\" width=\"2564\" height=\"1300\" class=\"aligncenter size-full wp-image-14034\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/plugin-test.png 2564w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/plugin-test-300x152.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/plugin-test-1024x519.png 1024w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/plugin-test-768x389.png 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/plugin-test-1536x779.png 1536w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/plugin-test-2048x1038.png 2048w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n<p>Wenn man einen anderen als den default Parameter haben will, kann der mit <strong>-D<\/strong> angegeben werden z.B.<\/p>\n<p><strong>mvn de.wenzlaff.command.maven.plugin:de.wenzlaff.command.maven.plugin:info -Dcommand=&#8220;ps&#8220;<\/strong><\/p>\n<p>um alle Prozesse auszugeben.<\/p>\n<p>6. Mit <strong>mvn site<\/strong> kann auch leicht der gewohnt Report erzeugt werden:<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/site-plugin.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/site-plugin.png\" alt=\"\" width=\"2786\" height=\"1562\" class=\"aligncenter size-full wp-image-14036\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/site-plugin.png 2786w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/site-plugin-300x168.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/site-plugin-1024x574.png 1024w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/site-plugin-768x431.png 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/site-plugin-1536x861.png 1536w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2020\/02\/site-plugin-2048x1148.png 2048w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ein eigenes Maven-Plugin zu erstellen ist nicht schwer und ist schnell gemacht. Wir wollen ein Plugin welches einen Verzeichnis Inhalt mit ls -la in das Log schreibt erstellen. Es k\u00f6nnen aber auch andere Linux Befehle \u00fcbergeben werden. Hier nun die 6 Schritte mit den Vorlagen die mind. n\u00f6tig sind. 1. Wir legen in Eclipse ein &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=14029\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eEin eigenes Maven-Plugin in 15 Minuten inklusive Dokumentation erstellen\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,3161,5,3897,1361,3163,7],"tags":[3899,2178,2193,66,3898,3900,293,256,322],"class_list":["post-14029","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-build","category-java","category-java-programmierung","category-java-8","category-maven","category-tools","tag-erstellen-maven-plugin","tag-java","tag-java-8","tag-maven","tag-maven-plugin","tag-maven-tool","tag-plugin","tag-tool","tag-verzeichnis"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/14029","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=14029"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/14029\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=14029"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=14029"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=14029"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}