{"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\/pl\/blog\/administrirovanie\/opyt-ispolzovaniya-flatten-maven-plugin-dlya-uproshheniya-versionirovaniya-v-maven-proektah","title":{"rendered":"Do\u015bwiadczenie z u\u017cyciem flatten-maven-plugin do uproszczenia wersjonowania w projektach maven","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h4>O nas<\/h4>\n<p>\nW 1C opracowujemy nie tylko platform\u0119 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/269611\/\">1C: Przedsi\u0119biorstwo<\/a><\/noindex> na <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/429678\/\">C++<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/315414\/\">JavaScript<\/a><\/noindex>, ale tak\u017ce aplikacje w Java \u2013 w szczeg\u00f3lno\u015bci nowe \u015brodowisko rozwoju <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/323508\/\">Narz\u0119dzia do rozwoju przedsi\u0119biorstw<\/a><\/noindex> na bazie Eclipse, a serwer jest g\u0142\u0119boko zintegrowany z platform\u0105 komunikatora \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/422903\/\">Systemy Interakcji<\/a><\/noindex>.<\/p>\n<h4>Wprowadzenie<\/h4>\n<p>\nJako system budowania aplikacji Java najcz\u0119\u015bciej u\u017cywamy maven, i w tym kr\u00f3tkim artykule chcemy opowiedzie\u0107 o jednym z problem\u00f3w, z kt\u00f3rymi musieli\u015bmy si\u0119 zmierzy\u0107 w procesie organizacji rozwoju, oraz o podej\u015bciu, kt\u00f3re pozwoli\u0142o nam pokona\u0107 ten problem.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>Pod\u0142o\u017ca i proces roboczy<\/h4>\n<p>\nZe wzgl\u0119du na specyfik\u0119 rozwoju w naszych projektach maven u\u017cywamy do\u015b\u0107 wielu modu\u0142\u00f3w, zale\u017cno\u015bci i projekt\u00f3w podrz\u0119dnych. Liczba plik\u00f3w pom w jednej strukturze mo\u017ce si\u0119ga\u0107 dziesi\u0105tek, a nawet setek.<\/p>\n<p><img decoding=\"async\" alt=\"Do\u015bwiadczenie z u\u017cyciem flatten-maven-plugin do uproszczenia wersjonowania w projektach maven\" src=\"\/wp-content\/uploads\/2019\/04\/60eddb63fb9bd58eda2edc890e2f771f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWydawa\u0142o si\u0119: nic strasznego, raz stworzyli\u015bmy i zapomnieli\u015bmy. Je\u015bli trzeba co\u015b zmieni\u0107 lub doda\u0107 we wszystkich plikach naraz, istnieje wiele wygodnych narz\u0119dzi w edytorach i IDE. A jakie jest najcz\u0119stsze, regularne zmieniane w pom.xml? Uwa\u017camy, \u017ce zmiana wersji projektu i zale\u017cno\u015bci. Mo\u017ce kto\u015b zechce si\u0119 z tym spiera\u0107, ale u nas sprawa wygl\u0105da w\u0142a\u015bnie tak. Pow\u00f3d tkwi w tym, \u017ce obok rdzenia r\u00f3wnolegle rozwijamy wiele w\u0142asnych bibliotek, a dla sta\u0142ej powtarzalno\u015bci wynik\u00f3w kompilacji i testowania u\u017cycie snapshot\u00f3w nie wydaje si\u0119 nam wygodnym podej\u015bciem. Z tego powodu musimy podnosi\u0107 numer wersji w projektach przy ka\u017cdej kompilacji.<\/p>\n<p>R\u00f3wnie\u017c dla dewelopera od czasu do czasu pojawia si\u0119 potrzeba zbudowania swojego oddzia\u0142u jakiej\u015b biblioteki i sprawdzenia jej dzia\u0142ania we wszystkich zale\u017cno\u015bciach, co wymaga r\u0119cznej zmiany wersji we wszystkich z nich.<\/p>\n<h4>Pocz\u0105tkowe rozwi\u0105zanie<\/h4>\n<p>\nZ takimi cz\u0119stymi i licznymi zmianami wersji proces w ramach CI chce si\u0119 upro\u015bci\u0107 i zautomatyzowa\u0107. W tym przypadku z pomoc\u0105 przychodzi wygodny, og\u00f3lnie znany plugin <i>versions-maven-plugin<\/i> \u2014 pod\u0142\u0105czamy go i uruchamiamy <\/p>\n<p><i>mvn -N versions:set -DnewVersion=2.0.1 <\/i><\/p>\n<p>i maven zrobi wszystko jak nale\u017cy: przejdzie przez hierarchi\u0119 od g\u00f3ry do do\u0142u, podmieni wszystkie wersje \u2014 pi\u0119kne! Teraz zostaje tylko podnie\u015b\u0107 pull-request, koledzy sprawdz\u0105 zmiany i mo\u017cna szybko w\u0142\u0105czy\u0107 si\u0119 w trunk. Szybko? Jakby nie by\u0142o. Para-trzy setki <i>pom.xml<\/i> w recenzji, nie licz\u0105c kodu. Dodatkowo nikt nie jest zabezpieczony przed konfliktami scalania przy tak du\u017cej liczbie zmienionych plik\u00f3w. Nale\u017cy zauwa\u017cy\u0107, \u017ce podczas CI zmiany wersji odbywaj\u0105 si\u0119 automatycznie wraz ze zmian\u0105 funkcjonalno\u015bci, a nie jako\u015b osobno.<\/p>\n<h4>Nowe mo\u017cliwo\u015bci<\/h4>\n<p>\nPrzez pewien czas uspokoili\u015bmy si\u0119 i, pogodzawszy si\u0119, tak \u017cyli\u015bmy, a\u017c ch\u0142opaki z <noindex><a rel=\"nofollow\" href=\"http:\/\/maven.apache.org\/\">Maven Apache Project<\/a><\/noindex> nie wprowadzili do maven, pocz\u0105wszy od wersji 3.5.0-beta-1, wsparcia dla tzw. \u201ezamiennik\u00f3w\u201d wersji (placeholders). Istot\u0105 tych zamiennik\u00f3w jest to, \u017ce w <i>pom.xml<\/i> zamiast konkretnego wskazania wersji projektu u\u017cywane s\u0105 zmienne <i>${revision}<\/i>, <i>${sha1}<\/i> i <i>${changelist}<\/i>. Same warto\u015bci tych atrybut\u00f3w s\u0105 okre\u015blane albo w elemencie &lt;<i>properties<\/i>&gt;, albo mo\u017cna je zdefiniowa\u0107 poprzez w\u0142a\u015bciwo\u015b\u0107 systemow\u0105<\/p>\n<p><i>mvn -Drevision=2.0.0 clean package<\/i><\/p>\n<p>Warto\u015bci w\u0142a\u015bciwo\u015bci systemowych maj\u0105 pierwsze\u0144stwo przed warto\u015bciami zdefiniowanymi w &lt;<i>properties<\/i>&gt;.<\/p>\n<p><i><b>Rodzic<\/b><br \/>\n&lt;project&gt;<br \/>\n\u00a0\u00a0&lt;modelVersion&gt;4.0.0&lt;\\\/modelVersion&gt;<br \/>\n\u00a0\u00a0&lt;parent&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0&lt;groupId&gt;org.apache&lt;\\\/groupId&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0&lt;artifactId&gt;apache&lt;\\\/artifactId&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0&lt;version&gt;18&lt;\\\/version&gt;<br \/>\n\u00a0\u00a0&lt;\\\/parent&gt;<br \/>\n\u00a0\u00a0&lt;groupId&gt;org.apache.maven.ci&lt;\\\/groupId&gt;<br \/>\n\u00a0\u00a0&lt;artifactId&gt;ci-parent&lt;\\\/artifactId&gt;<br \/>\n\u00a0\u00a0&lt;name&gt;First\u00a0CI\u00a0Friendly&lt;\\\/name&gt;<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>Potomek<\/b><br \/>\n&lt;project&gt;<br \/>\n\u00a0\u00a0&lt;modelVersion&gt;4.0.0&lt;\\\/modelVersion&gt;<br \/>\n\u00a0\u00a0&lt;parent&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0&lt;groupId&gt;org.apache.maven.ci&lt;\\\/groupId&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0&lt;artifactId&gt;ci-parent&lt;\\\/artifactId&gt;<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\u00a0&lt;groupId&gt;org.apache.maven.ci&lt;\\\/groupId&gt;<br \/>\n\u00a0\u00a0&lt;artifactId&gt;ci-child&lt;\\\/artifactId&gt;<br \/>\n\u00a0\u00a0\u00a0\u2026<br \/>\n&lt;\\\/project&gt;<br \/>\n<\/i><\/p>\n<p>Je\u015bli chcesz zbudowa\u0107 wersj\u0119 2.0.0-SNAPSHOT, po prostu u\u017cyj <\/p>\n<p><i>\u00a0\u00a0\u00a0\u00a0mvn -Drevision=2.0.0 clean package<\/i><\/p>\n<p>Je\u015bli chcesz zrobi\u0107 wydanie, po prostu resetuj SNAPSHOT <\/p>\n<p><i>\u00a0\u00a0\u00a0\u00a0mvn -Dchangelist= clean package<\/i><\/p>\n<p>*Przyk\u0142ady powy\u017cej wzi\u0119te z <noindex><a rel=\"nofollow\" href=\"https:\/\/maven.apache.org\/maven-ci-friendly.html\">artyku\u0142u<\/a><\/noindex> na stronie Maven Apache Project<\/p>\n<h4>Brutalna rzeczywisto\u015b\u0107<\/h4>\n<p>\nWszystko jest dobrze i \u015bwietnie, czas poczu\u0107 satysfakcj\u0119, ale nie. Okazuje si\u0119, \u017ce dla install i deploy ten spos\u00f3b si\u0119 nie nadaje, poniewa\u017c w opisach publikowanych w repozytorium artefakt\u00f3w nie b\u0119dzie zast\u0119powane <i>${revision}<\/i> na jej warto\u015b\u0107 i maven nie zrozumie dalej o co chodzi.<\/p>\n<p><i>&lt;parent&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0&lt;groupId&gt;org.apache&lt;\\\/groupId&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0&lt;artifactId&gt;apache&lt;\\\/artifactId&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0&lt;version&gt;${revision}&lt;\\\/version&gt;<br \/>\n&lt;\\\/parent&gt;<br \/>\n<\/i><\/p>\n<h4>\u015awiat\u0142o na ko\u0144cu tunelu<\/h4>\n<p>\nTrzeba szuka\u0107 rozwi\u0105zania problemu. Sytuacj\u0119 mog\u0142oby uratowa\u0107 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.mojohaus.org\/flatten-maven-plugin\/\">flatten-maven-plugin<\/a><\/noindex>Ten wtyczka pozwala na u\u017cywanie wszystkich zmiennych w pom, ale jednocze\u015bnie usuwa wiele innych informacji, kt\u00f3re s\u0105 potrzebne tylko podczas budowy i nie s\u0105 potrzebne przy imporcie opublikowanych artefakt\u00f3w do innych projekt\u00f3w. Dodatkowo wtyczka \"prostuje\" wszystkie zale\u017cno\u015bci parent-child, co skutkuje p\u0142askimi pom, zawieraj\u0105cymi wszystko, co potrzebne. Uci\u0105\u017cliwo\u015bci\u0105 by\u0142o to, \u017ce usuwa \"nadmiarowe\" informacje zbyt du\u017co, co nam zupe\u0142nie nie pasowa\u0142o. Po zbadaniu informacji na temat rozwoju tej wtyczki okaza\u0142o si\u0119, \u017ce nie jeste\u015bmy sami we wszech\u015bwiecie, a ju\u017c w sierpniu 2018 na GitHubie w repozytorium wtyczki stworzono pull-request z pro\u015bb\u0105 o mo\u017cliwo\u015b\u0107 samodzielnego okre\u015blenia, jak powinno si\u0119 \u201epsu\u0107\u201d pom.xml. Deweloperzy wys\u0142uchali g\u0142os\u00f3w potrzebuj\u0105cych i ju\u017c w grudniu, wraz z wydaniem nowej wersji 1.1.0, w flatten-maven-plugin pojawi\u0142 si\u0119 nowy tryb resolveCiFriendliesOnly, kt\u00f3ry idealnie si\u0119 wpasowa\u0142 \u2013 pozostawia pom.xml taki, jaki jest, z wyj\u0105tkiem elementu <i>&lt;version&gt;<\/i> i pozwala na <i>${revision}<\/i>, <i>${sha1}<\/i> i <i>${changelist}<\/i>.<\/p>\n<p>Dodajemy wtyczk\u0119 do projektu<\/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\u00a0&lt;id&gt;flatten&lt;\\\/id&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;phase&gt;process-resources&lt;\\\/phase&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;goals&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;goal&gt;flatten&lt;\\\/goal&gt;<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\u00a0&lt;id&gt;flatten.clean&lt;\\\/id&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;phase&gt;clean&lt;\\\/phase&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;goals&gt;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;goal&gt;clean&lt;\\\/goal&gt;<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>Gotowe!<\/p>\n<h4>Szcz\u0119\u015bliwe zako\u0144czenie<\/h4>\n<p>\nOd teraz, aby zmieni\u0107 wersj\u0119 ca\u0142ego projektu i poinformowa\u0107 o tym wszystkie zale\u017cno\u015bci, wystarczy edytowa\u0107 element &lt;<i>revision<\/i>&gt; w jednym tylko korzeniu <i>pom.xml<\/i>. Na przegl\u0105d przesy\u0142any jest nie setki tych plik\u00f3w z tym samym zmienonym elementem, a jeden. Tak wi\u0119c znika konieczno\u015b\u0107 korzystania z <i>versions-maven-plugin<\/i>.<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <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\/pl\/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=\"pl_PL\" \/>\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\/pl\/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\udd47Do\u015bwiadczenie u\u017cycia flatten-maven-plugin do uproszczenia wersjonowania w projektach maven | ProHoster","description":"O nas W 1C opracowujemy nie tylko platform\u0119 1C: Przedsi\u0119biorstwo na","canonical_url":"https:\/\/prohoster.info\/pl\/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":"pl_PL","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\/pl\/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\/pl\/wp-json\/wp\/v2\/posts\/32476","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=32476"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/32476\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/24280"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=32476"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=32476"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=32476"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}