{"id":32476,"date":"2019-10-31T21:47:17","date_gmt":"2019-10-31T18:47:17","guid":{"rendered":"https:\/\/prohoster.info\/blog\/opyt-ispolzovaniya-flatten-maven-plugin-dlya-uproshheniya-versionirovaniya-v-maven-proektah\/"},"modified":"2019-10-31T21:47:17","modified_gmt":"2019-10-31T18:47:17","slug":"opyt-ispolzovaniya-flatten-maven-plugin-dlya-uproshheniya-versionirovaniya-v-maven-proektah","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/opyt-ispolzovaniya-flatten-maven-plugin-dlya-uproshheniya-versionirovaniya-v-maven-proektah","title":{"rendered":"Erfahrung mit dem flatten-maven-plugin zur Vereinfachung der Versionsverwaltung in Maven-Projekten","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h4>Alconost ist professionell t\u00e4tig<\/h4>\n<p>\nBei 1C entwickeln wir nicht nur die Plattform <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/269611\/\">1C: Unternehmenssoftware<\/a><\/noindex> auf <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/429678\/\">C++<\/a><\/noindex> und <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/315414\/\">JavaScript<\/a><\/noindex>, sondern auch Anwendungen in Java \u2013 insbesondere eine neue Entwicklungsumgebung <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/323508\/\">Enterprise Development Tools<\/a><\/noindex> basierend auf Eclipse und einem tief in die Plattform integrierten Server des Messengers \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/422903\/\">Interaktionssysteme<\/a><\/noindex>.<\/p>\n<h4>Einleitung<\/h4>\n<p>\nAls Build-System f\u00fcr Java-Anwendungen verwenden wir h\u00e4ufig Maven. In diesem kleinen Artikel m\u00f6chten wir \u00fcber eines der Probleme sprechen, mit denen wir bei der Organisation der Entwicklung konfrontiert waren, und \u00fcber den Ansatz, der uns geholfen hat, dieses Problem zu l\u00f6sen.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>Voraussetzungen und Arbeitsablauf<\/h4>\n<p>\nAufgrund der spezifischen Art der Entwicklung in unseren Maven-Projekten verwenden wir relativ viele Module, Abh\u00e4ngigkeiten und Unterprojekte. Die Anzahl der pom-Dateien in einem Baum kann sich auf Dutzende oder sogar Hunderte belaufen.<\/p>\n<p><img decoding=\"async\" alt=\"Erfahrung mit dem flatten-maven-plugin zur Vereinfachung der Versionsverwaltung in Maven-Projekten\" src=\"\/wp-content\/uploads\/2019\/04\/60eddb63fb9bd58eda2edc890e2f771f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEs scheint harmlos zu sein: Einmal erzeugt und vergessen. Wenn man etwas \u00e4ndern oder in allen Dateien gleichzeitig hinzuf\u00fcgen muss, gibt es viele praktische Werkzeuge in Editoren und IDEs. Aber was ist die h\u00e4ufigste regelm\u00e4\u00dfige \u00c4nderung in pom.xml? Wir vermuten, dass es sich um die Versions\u00e4nderungen von Projekten und Abh\u00e4ngigkeiten handelt. Vielleicht m\u00f6chte jemand dagegen argumentieren, aber bei uns ist das tats\u00e4chlich so. Der Grund daf\u00fcr liegt darin, dass wir parallel zum Kern viele eigene Bibliotheken entwickeln und die st\u00e4ndige Reproduzierbarkeit der Build- und Testergebnisse einen Ansatz mit Snapshots f\u00fcr uns unpraktisch macht. Aus diesem Grund m\u00fcssen wir bei jedem Build die Versionsnummer der Projekte erh\u00f6hen.<\/p>\n<p>Auch der Entwickler hat von Zeit zu Zeit die Notwendigkeit, seinen Branch einer bestimmten Bibliothek zu erstellen und deren Funktionalit\u00e4t in Bezug auf alle Abh\u00e4ngigkeiten zu \u00fcberpr\u00fcfen, was bedeutet, dass er manuell die Version in allen diesen Abh\u00e4ngigkeiten \u00e4ndern muss.<\/p>\n<h4>Urspr\u00fcngliche L\u00f6sung<\/h4>\n<p>\nBei so h\u00e4ufigen und zahlreichen Versions\u00e4nderungen m\u00f6chte man den Prozess im CI vereinfachen und automatisieren. Hier kommt ein praktisches, allgemein bekanntes Plugin zur Hilfe <i>versions-maven-plugin<\/i> \u2013 wir f\u00fcgen es hinzu und starten <\/p>\n<p><i>mvn -N versions:set -DnewVersion=2.0.1 <\/i><\/p>\n<p>und Maven wird alles richtig machen: Es wird die Hierarchie von oben nach unten durchlaufen und alle Versionen ersetzen \u2013 wunderbar! Jetzt bleibt nur noch, einen Pull-Request zu erstellen, die Kollegen werden die \u00c4nderungen pr\u00fcfen und man kann schnell in den Trunk einflie\u00dfen. Schnell? Wie gesagt, zwei bis drei Hundert <i>pom.xml<\/i> in der \u00dcberpr\u00fcfung, und das ist nicht einmal der Code. Au\u00dferdem ist niemand vor Merge-Konflikten gefeit, wenn so viele Dateien ge\u00e4ndert wurden. Hier muss angemerkt werden, dass im CI-Prozess Versions\u00e4nderungen automatisch zusammen mit der \u00c4nderung der Funktionalit\u00e4t stattfinden und nicht separat.<\/p>\n<h4>Neue Funktionen<\/h4>\n<p>\nF\u00fcr eine Weile beruhigten wir uns und lebten so, bis die Jungs von <noindex><a rel=\"nofollow\" href=\"http:\/\/maven.apache.org\/\">Maven Apache Project<\/a><\/noindex> ab Version 3.5.0-beta-1 die Unterst\u00fctzung f\u00fcr sogenannte \"Platzhalter\" in Maven einf\u00fcgten. Das Wesen dieser Platzhalter besteht darin, dass anstelle einer spezifischen Angabe der Projektversion Variablen verwendet werden, <i>pom.xml<\/i> anstatt konkret die Projektversion anzugeben. <i>${revision}<\/i>, <i>${sha1}<\/i> und <i>${changelist}<\/i>. Die Werte dieser Eigenschaften werden entweder im Element &lt;<i>properties<\/i>&gt;, oder sie k\u00f6nnen \u00fcber eine Systemvariable definiert werden.<\/p>\n<p><i>mvn -Drevision=2.0.0 clean package<\/i><\/p>\n<p>Die Werte der Systemvariablen haben Vorrang vor den Werten, die im &lt;<i>properties<\/i>&gt;, definiert sind.<\/p>\n<p><i><b>Elternteil<\/b><br \/>\n&lt;project&gt;<br \/>\n\u00a0\u00a04.0.0<br \/>\n\u00a0\u00a0&lt;parent&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0org.apache<br \/>\n\u00a0\u00a0\u00a0\u00a0apache<br \/>\n\u00a0\u00a0\u00a0\u00a018<br \/>\n\u00a0\u00a0&lt;\/parent&gt;<br \/>\n\u00a0\u00a0org.apache.maven.ci<br \/>\n\u00a0\u00a0ci-parent<br \/>\n\u00a0\u00a0First CI Friendly<br \/>\n\u00a0\u00a0&lt;version&gt;<b>${revision}${sha1}${changelist}<\/b>&lt;\/version&gt;<br \/>\n\u00a0\u00a0\u2026<br \/>\n\u00a0\u00a0&lt;properties&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0<b>&lt;revision&gt;<\/b>1.3.1<b>&lt;\/revision&gt;<\/b><br \/>\n\u00a0\u00a0\u00a0\u00a0<b>&lt;changelist&gt;<\/b>-SNAPSHOT<b>&lt;\/changelist&gt;<\/b><br \/>\n\u00a0\u00a0\u00a0\u00a0<b>&lt;sha1<\/b><br \/>\n\u00a0\u00a0&lt;\/properties&gt;<br \/>\n&lt;\/project&gt;<br \/>\n<\/i><br \/>\n<i><b>Nachkomme<\/b><br \/>\n&lt;project&gt;<br \/>\n\u00a0\u00a04.0.0<br \/>\n\u00a0\u00a0&lt;parent&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0org.apache.maven.ci<br \/>\n\u00a0\u00a0\u00a0\u00a0ci-parent<br \/>\n\u00a0\u00a0\u00a0\u00a0&lt;version&gt;<b>${revision}${sha1}${changelist}<\/b>&lt;\/version&gt;<br \/>\n\u00a0\u00a0&lt;\/parent&gt;<br \/>\n\u00a0\u00a0org.apache.maven.ci<br \/>\n\u00a0\u00a0ci-child<br \/>\n\u00a0\u00a0\u00a0\u2026<br \/>\n&lt;\/project&gt;<br \/>\n<\/i><\/p>\n<p>Wenn Sie die Version 2.0.0-SNAPSHOT erstellen m\u00f6chten, verwenden Sie einfach <\/p>\n<p><i>\u00a0\u00a0\u00a0\u00a0mvn -Drevision=2.0.0 clean package<\/i><\/p>\n<p>Wenn Sie ein Release machen m\u00f6chten, setzen Sie einfach die SNAPSHOT zur\u00fcck. <\/p>\n<p><i>\u00a0\u00a0\u00a0\u00a0mvn -Dchangelist= clean package<\/i><\/p>\n<p>*Die obigen Beispiele stammen von <noindex><a rel=\"nofollow\" href=\"https:\/\/maven.apache.org\/maven-ci-friendly.html\">des Artikels<\/a><\/noindex> der Website des Maven Apache Project<\/p>\n<h4>Die harte Realit\u00e4t<\/h4>\n<p>\nAlles ist gut und sch\u00f6n, es ist Zeit, Zufriedenheit zu empfinden, aber nein. Es stellt sich heraus, dass diese Methode f\u00fcr Install und Deploy nicht geeignet ist, da die Beschreibungen der Artefakte, die im Repository ver\u00f6ffentlicht werden, nicht durch <i>${revision}<\/i> ihren Wert ersetzt werden und maven damit nicht versteht, worum es \u00fcberhaupt geht.<\/p>\n<p><i>&lt;parent&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0org.apache<br \/>\n\u00a0\u00a0\u00a0\u00a0apache<br \/>\n\u00a0\u00a0\u00a0\u00a0${revision}<br \/>\n&lt;\/parent&gt;<br \/>\n<\/i><\/p>\n<h4>Licht am Ende des Tunnels<\/h4>\n<p>\nEs muss eine L\u00f6sung f\u00fcr das Problem gefunden werden. Die Situation k\u00f6nnte durch <noindex><a rel=\"nofollow\" href=\"https:\/\/www.mojohaus.org\/flatten-maven-plugin\/\">flatten-maven-plugin gerettet werden.<\/a><\/noindex>. Dieses Plugin erlaubt alle Variablen in pom, schneidet jedoch gleichzeitig eine Menge anderer Informationen heraus, die nur beim Build ben\u00f6tigt werden und beim Import ver\u00f6ffentlichter Artefakte in andere Projekte nicht erforderlich sind. Au\u00dferdem \"gl\u00e4ttet\" das Plugin alle parent-child Abh\u00e4ngigkeiten, und am Ende erh\u00e4lt man flache pom-Dateien, die alles enthalten, was ben\u00f6tigt wird. Das Problem war, dass es zu viel \"\u00dcberfl\u00fcssiges\" herausgeschnitten hat, was uns ganz und gar nicht passte. Nach dem Studium der Informationen zur Entwicklung dieses Plugins stellte sich heraus, dass wir nicht die einzigen sind, und bereits im August 2018 wurde im GitHub-Repository des Plugins ein Pull-Request erstellt, in dem der Wunsch ge\u00e4u\u00dfert wurde, die M\u00f6glichkeit zu schaffen, selbst zu bestimmen, wie man pom.xml \"verderben\" muss. Die Entwickler h\u00f6rten auf die Stimmen der Bed\u00fcrfnisartigen, und bereits im Dezember mit der Ver\u00f6ffentlichung der neuen Version 1.1.0 erschien im flatten-maven-plugin ein neuer Modus resolveCiFriendliesOnly, der passender ist als je zuvor \u2013 er bel\u00e4sst pom.xml so wie sie ist, mit Ausnahme des Elements <i>&lt;version&gt;<\/i> und erlaubt <i>${revision}<\/i>, <i>${sha1}<\/i> und <i>${changelist}<\/i>.<\/p>\n<p>Plugin zum Projekt hinzuf\u00fcgen<\/p>\n<p><i>&lt;plugins&gt;<br \/>\n\u00a0\u00a0&lt;plugin&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0org.codehaus.mojo<br \/>\n\u00a0\u00a0\u00a0\u00a0flatten-maven-plugin<br \/>\n\u00a0\u00a0\u00a0\u00a01.1.0<br \/>\n\u00a0\u00a0\u00a0\u00a0&lt;configuration&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0true<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;flattenMode&gt;<b>resolveCiFriendliesOnly<\/b>&lt;\/flattenMode&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0&lt;\/configuration&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0&lt;executions&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;execution&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0flatten<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0process-resources<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;goals&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0flatten<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/goals&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/execution&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;execution&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0flatten.clean<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0clean<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;goals&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0clean<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/goals&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/execution&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0&lt;\/executions&gt;<br \/>\n\u00a0\u00a0&lt;\/plugin&gt;<br \/>\n&lt;\/plugins&gt;<br \/>\n<\/i><\/p>\n<p>Fertig!<\/p>\n<h4>Happy End<\/h4>\n<p>\nVon nun an m\u00fcssen wir nur noch das Element &lt;<i>revision<\/i>&gt; im einzigen Wurzel <i>pom.xml<\/i>. Bei der \u00dcberpr\u00fcfung kommt nicht hundert oder mehr dieser Dateien mit der gleichen \u00c4nderung an, sondern nur eine. Somit entf\u00e4llt die Notwendigkeit zur Verwendung von <i>versions-maven-plugin<\/i>.<br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/449172\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041e \u043d\u0430\u0441 \u0412 1\u0421 \u043c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 1\u0421: \u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u043d\u0430 \u0421++ \u0438 JavaScript, \u043d\u043e \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Java \u2013 \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u043d\u043e\u0432\u0443\u044e \u0441\u0440\u0435\u0434\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 Enterprise Development Tools \u043d\u0430 \u0431\u0430\u0437\u0435 Eclipse \u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0441 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430 \u2013 \u0421\u0438\u0441\u0442\u0435\u043c\u044b \u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441\u0431\u043e\u0440\u043a\u0438 Java-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c maven, \u0438 \u0432 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24280,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32476","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041e \u043d\u0430\u0441 \u0412 1\u0421 \u043c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 1\u0421: \u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u043d\u0430\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/opyt-ispolzovaniya-flatten-maven-plugin-dlya-uproshheniya-versionirovaniya-v-maven-proektah\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e\u043f\u044b\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f flatten-maven-plugin \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 maven-\u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041e \u043d\u0430\u0441 \u0412 1\u0421 \u043c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 1\u0421: \u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u043d\u0430\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/opyt-ispolzovaniya-flatten-maven-plugin-dlya-uproshheniya-versionirovaniya-v-maven-proektah\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:47:17+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:47:17+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Erfahrungen mit flatten-maven-plugin zur Vereinfachung der Versionierung in Maven-Projekten | ProHoster","description":"\u00dcber uns Bei 1C entwickeln wir nicht nur die Plattform 1C:Enterprise auf","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/opyt-ispolzovaniya-flatten-maven-plugin-dlya-uproshheniya-versionirovaniya-v-maven-proektah","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e\u043f\u044b\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f flatten-maven-plugin \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 maven-\u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 | ProHoster","og:description":"\u041e \u043d\u0430\u0441 \u0412 1\u0421 \u043c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 1\u0421: \u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u043d\u0430","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/opyt-ispolzovaniya-flatten-maven-plugin-dlya-uproshheniya-versionirovaniya-v-maven-proektah","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:47:17+00:00","article:modified_time":"2019-10-31T18:47:17+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32476","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 11:03:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:58:23","updated":"2026-01-21 11:03:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/32476","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=32476"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/32476\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/24280"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=32476"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=32476"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=32476"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}