{"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":"Erfahrungen mit flatten-maven-plugin zur Vereinfachung der Versionierung in Maven-Projekten","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h4>\u00dcber uns<\/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: Enterprise<\/a><\/noindex> findet man <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 der Server ist tief in die Plattform des Messengers integriert \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, und in diesem kurzen Artikel m\u00f6chten wir \u00fcber eines der Probleme sprechen, mit denen wir bei der Organisation der Entwicklung konfrontiert waren, sowie \u00fcber den Ansatz, der uns geholfen hat, dieses Problem zu \u00fcberwinden.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>Voraussetzungen und Arbeitsablauf<\/h4>\n<p>\nAufgrund der Besonderheiten der Entwicklung in unseren Maven-Projekten verwenden wir recht 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=\"Erfahrungen mit flatten-maven-plugin zur Vereinfachung der Versionierung in Maven-Projekten\" src=\"\/wp-content\/uploads\/2019\/04\/60eddb63fb9bd58eda2edc890e2f771f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEs scheint, als w\u00e4re es nicht schlimm, einmal erstellt und dann vergessen. Wenn man etwas in allen Dateien gleichzeitig \u00e4ndern oder hinzuf\u00fcgen m\u00f6chte, gibt es viele n\u00fctzliche Werkzeuge in Editoren und IDEs. Was ist die h\u00e4ufigste Ver\u00e4nderung der pom.xml? Wir gehen davon aus, dass es sich um die \u00c4nderung der Versionen des Projekts und der Abh\u00e4ngigkeiten handelt. Vielleicht m\u00f6chte jemand dem widersprechen, aber so ist es bei uns. Der Grund liegt darin, dass wir neben dem Kern viele eigene Bibliotheken parallel entwickeln, und f\u00fcr eine konsistente Reproduzierbarkeit der Build- und Testergebnisse ist die Verwendung von Snapshots f\u00fcr uns kein praktischer Ansatz. Deshalb m\u00fcssen wir die Versionsnummer in den Projekten bei jedem Build erh\u00f6hen.<\/p>\n<p>Auch der Entwickler ben\u00f6tigt von Zeit zu Zeit die M\u00f6glichkeit, seinen Zweig einer Bibliothek zu erstellen und dessen Funktionsf\u00e4higkeit in Bezug auf alle Abh\u00e4ngigkeiten zu \u00fcberpr\u00fcfen, was erfordert, dass in allen manuell die Version ge\u00e4ndert werden muss.<\/p>\n<h4>Urspr\u00fcngliche L\u00f6sung<\/h4>\n<p>\nMit so h\u00e4ufigen und zahlreichen Versions\u00e4nderungen m\u00f6chte man den Prozess im CI-Bereich vereinfachen und automatisieren. Hier kommt ein n\u00fctzliches, weithin bekanntes Plugin ins Spiel. <i>versions-maven-plugin<\/i> \u2014 wir integrieren es und starten es <\/p>\n<p><i>mvn -N versions:set -DnewVersion=2.0.1 <\/i><\/p>\n<p>und Maven erledigt alles wie gew\u00fcnscht: es durchl\u00e4uft die Hierarchie von oben nach unten und ersetzt alle Versionen \u2014 wunderbar! Jetzt bleibt nur noch, einen Pull-Request zu erstellen, den die Kollegen \u00fcberpr\u00fcfen werden, und dann k\u00f6nnen wir schnell in den Trunk einflie\u00dfen. Schnell? So einfach ist das nicht. Da sind ein paar hundert <i>pom.xml<\/i> zur \u00dcberpr\u00fcfung, und das ist noch nicht alles. Zudem sind wir bei so vielen ge\u00e4nderten Dateien nicht vor Merge-Konflikten gefeit. Hier muss man anmerken, dass die Versions\u00e4nderungen im CI-Prozess automatisch erfolgen, zusammen mit den \u00c4nderungen im Funktionsumfang und nicht separat.<\/p>\n<h4>Neue Funktionen<\/h4>\n<p>\nWir haben eine Zeit lang Ruhe gefunden und, bis wir uns beruhigt haben, so gelebt, bis die Leute von <noindex><a rel=\"nofollow\" href=\"http:\/\/maven.apache.org\/\">Maven Apache Project<\/a><\/noindex> in Maven ab Version 3.5.0-beta-1 die Unterst\u00fctzung f\u00fcr sogenannte \u201eVersionsplatzhalter\u201c (placeholders) integriert haben. Die Idee dieser Platzhalter ist, dass an <i>pom.xml<\/i> stelle der konkreten Versionsangabe Variablen verwendet werden <i>${revision}<\/i>, <i>${sha1}<\/i> und <i>${changelist}<\/i>. Die Werte dieser Eigenschaften werden entweder im Element &lt;<i>properties<\/i>&gt; festgelegt oder sie k\u00f6nnen \u00fcber eine Systemvariable definiert werden<\/p>\n<p><i>mvn -Drevision=2.0.0 clean package<\/i><\/p>\n<p>Systemeigenschaften haben Vorrang vor den in &lt;<i>properties<\/i>&gt; definierten Werten.<\/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\u00a0Erstes CI-freundliches Projekt<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\/&gt;<\/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 bauen 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 wollen, setzen Sie einfach 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\">einem Artikel<\/a><\/noindex> der Apache Maven-Projektwebsite<\/p>\n<h4>Die harte Realit\u00e4t<\/h4>\n<p>\nAlles ist gut und sch\u00f6n, es ist Zeit, ein Gef\u00fchl der Zufriedenheit zu erleben, aber nein. Es stellt sich heraus, dass dieser Weg f\u00fcr install und deploy nicht geeignet ist, da in den Beschreibungen der in das Repository ver\u00f6ffentlichten Artefakte nicht <i>${revision}<\/i> durch ihren Wert ersetzt wird und Maven somit nicht verstehen kann, 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 gilt, eine L\u00f6sung f\u00fcr das Problem zu finden. Die Situation k\u00f6nnte durch <noindex><a rel=\"nofollow\" href=\"https:\/\/www.mojohaus.org\/flatten-maven-plugin\/\">flatten-maven-plugin<\/a><\/noindex>. Dieses Plugin erlaubt es, alle Variablen im POM zu verwenden, schneidet jedoch auch eine Menge anderer Informationen heraus, die nur f\u00fcr den Build ben\u00f6tigt werden und beim Import ver\u00f6ffentlichter Artefakte in andere Projekte nicht n\u00f6tig sind. Das Plugin \"gl\u00e4ttet\" alle Parent-Child-Abh\u00e4ngigkeiten, und am Ende erh\u00e4lt man flache POMs, die alles enthalten, was man ben\u00f6tigt. Das Unbehagen resultierte daraus, dass es zu viel \u201e\u00dcberfl\u00fcssiges\u201c entfernt, was f\u00fcr uns v\u00f6llig unakzeptabel war. Nach eingehender Recherche zur Entwicklung dieses Plugins stellte sich heraus, dass wir nicht die Einzigen im Universum sind. Bereits im August 2018 wurde im GitHub-Repository des Plugins ein Pull-Request erstellt mit dem Wunsch, die M\u00f6glichkeit zu schaffen, selbst zu bestimmen, wie man das pom.xml \u201ever\u00e4ndern\u201c m\u00f6chte. Die Entwickler h\u00f6rten auf die Stimmen der Bed\u00fcrftigen, und bereits im Dezember mit der Ver\u00f6ffentlichung der neuen Version 1.1.0 erhielt das flatten-maven-plugin einen neuen Modus resolveCiFriendliesOnly, der wie gerufen kam \u2013 er l\u00e4sst das pom.xml unver\u00e4ndert, au\u00dfer beim Element <i>&lt;version&gt;<\/i> und erlaubt <i>${revision}<\/i>, <i>${sha1}<\/i> und <i>${changelist}<\/i>.<\/p>\n<p>F\u00fcgen Sie das Plugin zum Projekt hinzu<\/p>\n<p><i>&lt;plugins&gt;<br \/>\n\u00a0\u00a0&lt;plugin&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0&lt;groupId&gt;org.codehaus.mojo&lt;\/groupId&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0&lt;artifactId&gt;flatten-maven-plugin&lt;\/artifactId&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0&lt;version&gt;1.1.0&lt;\/version&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0&lt;configuration&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;updatePomFile&gt;true&lt;\/updatePomFile&gt;<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>\nUm die Version des gesamten Projekts zu \u00e4ndern und alle Abh\u00e4ngigkeiten dar\u00fcber zu informieren, m\u00fcssen wir nur das Element &lt;<i>revision<\/i>&gt; in einem einzigen Wurzelverzeichnis bearbeiten. Anstatt hunderte solcher Dateien mit identischen \u00c4nderungen zu erhalten, kommt nur eine. Dadurch entf\u00e4llt auch die Notwendigkeit f\u00fcr <i>pom.xml<\/i>. Anstatt hunderte von diesen Dateien mit identischen \u00c4nderungen zu \u00fcberpr\u00fcfen, gibt es nur eine. Damit entf\u00e4llt auch die Notwendigkeit der Nutzung. <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 4.9.10 - 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 \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\" \/>\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) 4.9.10\" \/>\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 \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\" \/>\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 dem flatten-maven-plugin zur Vereinfachung der Versionierung in Maven-Projekten | ProHoster","description":"\u00dcber uns Bei 1C entwickeln wir nicht nur die 1C:Enterprise-Plattform in C++ und JavaScript, sondern auch Anwendungen in Java \u2013 insbesondere eine neue Entwicklungsumgebung, die Enterprise Development Tools, basierend auf Eclipse, sowie einen tief in die Plattform integrierten Messenger-Server \u2013 das Interaktionssystem. Einleitung Als Build-System f\u00fcr Java-Anwendungen verwenden wir in der Regel Maven, und","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 \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","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"},"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}]}}