{"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\/sv\/blog\/administrirovanie\/opyt-ispolzovaniya-flatten-maven-plugin-dlya-uproshheniya-versionirovaniya-v-maven-proektah","title":{"rendered":"Erfarenhet av att anv\u00e4nda flatten-maven-plugin f\u00f6r att f\u00f6renkla versionering i maven-projekt","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h4>Alconost arbetar professionellt med<\/h4>\n<p>\nP\u00e5 1C utvecklar vi inte bara plattformen <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/269611\/\">1C: F\u00f6retag<\/a><\/noindex> till <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/429678\/\">C++<\/a><\/noindex> och <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/315414\/\">JavaScript<\/a><\/noindex>, utan \u00e4ven applikationer p\u00e5 Java \u2013 speciellt en ny utvecklingsmilj\u00f6 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/323508\/\">Enterprise Development Tools<\/a><\/noindex> baserad p\u00e5 Eclipse och servern \u00e4r djupt integrerad med plattformens meddelandetj\u00e4nst \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/422903\/\">Interaktionssystem<\/a><\/noindex>.<\/p>\n<h4>Inledning<\/h4>\n<p>\nSom byggsystem f\u00f6r Java-applikationer anv\u00e4nder vi oftast Maven, och i denna korta artikel vill vi ber\u00e4tta om ett av de problem som vi st\u00f6tt p\u00e5 i utvecklingsorganiseringen och om den metod som gjorde det m\u00f6jligt att \u00f6vervinna problemet.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>F\u00f6ruts\u00e4ttningarna och arbetsfl\u00f6det<\/h4>\n<p>\nMed h\u00e4nsyn till s\u00e4rdragen i utvecklingen i v\u00e5ra Maven-projekt anv\u00e4nder vi ganska m\u00e5nga moduler, beroenden och underprojekt. Antalet pom-filer i ett enda tr\u00e4d kan r\u00e4knas i dussin och till och med hundratals.<\/p>\n<p><img decoding=\"async\" alt=\"Erfarenhet av att anv\u00e4nda flatten-maven-plugin f\u00f6r att f\u00f6renkla versionering i maven-projekt\" src=\"\/wp-content\/uploads\/2019\/04\/60eddb63fb9bd58eda2edc890e2f771f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDet verkar inte vara s\u00e5 farligt \u2013 vi skapar dem en g\u00e5ng och gl\u00f6mmer dem. Om man beh\u00f6ver \u00e4ndra eller l\u00e4gga till n\u00e5got i alla filer p\u00e5 en g\u00e5ng finns det gott om anv\u00e4ndbara verktyg i redigerare och IDE. Men vad \u00e4r den vanligaste regelbundna f\u00f6r\u00e4ndringen av pom.xml? Vi tror att det handlar om att \u00e4ndra versioner av projektet och beroendena. Kanske kommer n\u00e5gon att vilja diskutera detta, men s\u00e5 h\u00e4r ser det ut f\u00f6r oss. Anledningen \u00e4r att vi parallellt utvecklar m\u00e5nga egna bibliotek vid sidan av k\u00e4rnan, och f\u00f6r att st\u00e4ndigt reproducera resultaten av bygg och testning \u00e4r anv\u00e4ndningen av snapshots inte ett bekv\u00e4mt tillv\u00e4gag\u00e5ngss\u00e4tt f\u00f6r oss. D\u00e4rf\u00f6r m\u00e5ste vi h\u00f6ja versionsnumret i projekten vid varje byggen.<\/p>\n<p>Utvecklaren har ocks\u00e5 ibland behov av att bygga sin egen gren av n\u00e5got bibliotek och kontrollera dess funktionalitet f\u00f6r alla beroenden, vilket inneb\u00e4r att man manuellt f\u00e5r \u00e4ndra versionen i alla dessa.<\/p>\n<h4>Den initiala l\u00f6sningen<\/h4>\n<p>\nMed s\u00e5 frekventa och m\u00e5nga f\u00f6r\u00e4ndringar av versioner vill man f\u00f6renkla och automatisera processen inom CI. H\u00e4r kommer en anv\u00e4ndbar och v\u00e4lk\u00e4nd plugin till hj\u00e4lp <i>versions-maven-plugin<\/i> \u2013 vi kopplar in den och k\u00f6r <\/p>\n<p><i>mvn -N versions:set -DnewVersion=2.0.1 <\/i><\/p>\n<p>och Maven g\u00f6r allt som det ska: det g\u00e5r igenom hierarkin uppifr\u00e5n och ner, byter ut alla versioner \u2013 vackert! Nu \u00e5terst\u00e5r det bara att skicka upp en pull-request, kollegorna granskar \u00e4ndringarna, och s\u00e5 kan man snabbt g\u00e5 med i trunk. Snabbt? Kanske inte. N\u00e5gra hundra <i>pom.xml<\/i> f\u00f6r recension, och detta utan att r\u00e4kna med koden. Dessutom \u00e4r ingen skyddad fr\u00e5n merge-konflikter n\u00e4r det finns s\u00e5 m\u00e5nga \u00e4ndrade filer. H\u00e4r b\u00f6r det noteras att i CI-processen sker versions\u00e4ndringar automatiskt tillsammans med f\u00f6r\u00e4ndringen av funktionalitet, och inte p\u00e5 n\u00e5got separat s\u00e4tt.<\/p>\n<h4>Nya funktioner<\/h4>\n<p>\nUnder en tid lugnade vi oss och, accepterande, levde vi s\u00e5 h\u00e4r tills killarna fr\u00e5n <noindex><a rel=\"nofollow\" href=\"http:\/\/maven.apache.org\/\">Maven Apache Project<\/a><\/noindex> b\u00f6rjade i maven fr\u00e5n version 3.5.0-beta-1 att st\u00f6dja s\u00e5 kallade \"versionsers\u00e4ttare\" (placeholders). Id\u00e9n med dessa ers\u00e4ttare \u00e4r att <i>pom.xml<\/i> snarare \u00e4n ett konkret versionsangivande anv\u00e4nds variabler. <i>${revision}<\/i>, <i>${sha1}<\/i> och <i>${changelist}<\/i>. Sj\u00e4lva v\u00e4rdena f\u00f6r dessa egenskaper anges antingen i elementet &lt;<i>properties<\/i>&gt;, eller s\u00e5 kan de definieras genom systemegenskapen<\/p>\n<p><i>mvn -Drevision=2.0.0 clean package<\/i><\/p>\n<p>V\u00e4rdena f\u00f6r systemegenskaper har f\u00f6retr\u00e4de framf\u00f6r v\u00e4rden som definieras i &lt;<i>properties<\/i>&gt;.<\/p>\n<p><i><b>F\u00f6r\u00e4lder<\/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 CI Friendly&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>Barn<\/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>Om du vill bygga version 2.0.0-SNAPSHOT, s\u00e5 anv\u00e4nder du helt enkelt <\/p>\n<p><i>\u00a0\u00a0\u00a0\u00a0mvn -Drevision=2.0.0 clean package<\/i><\/p>\n<p>Om du vill g\u00f6ra en release, s\u00e5 nollst\u00e4ller du bara SNAPSHOT <\/p>\n<p><i>\u00a0\u00a0\u00a0\u00a0mvn -Dchangelist= clean package<\/i><\/p>\n<p>*Exemplen ovan \u00e4r tagna fr\u00e5n <noindex><a rel=\"nofollow\" href=\"https:\/\/maven.apache.org\/maven-ci-friendly.html\">artiklar<\/a><\/noindex> den officiella webbplatsen f\u00f6r Maven Apache Project<\/p>\n<h4>Den h\u00e5rda verkligheten<\/h4>\n<p>\nAllt \u00e4r bra och fantastiskt, det \u00e4r dags att k\u00e4nna tillfredsst\u00e4llelse, men nej. Det visar sig att f\u00f6r install och deploy fungerar inte den h\u00e4r metoden, eftersom i beskrivningarna av artefakterna som publiceras till lagret kommer det inte att bytas ut <i>${revision}<\/i> mot dess v\u00e4rde, och maven kommer inte att f\u00f6rst\u00e5 vad det handlar om.<\/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>Ljus i slutet av tunneln<\/h4>\n<p>\nVi m\u00e5ste leta efter en l\u00f6sning p\u00e5 problemet. Situationen skulle kunna r\u00e4ddas av <noindex><a rel=\"nofollow\" href=\"https:\/\/www.mojohaus.org\/flatten-maven-plugin\/\">flatten-maven-plugin<\/a><\/noindex>. Den h\u00e4r pluginen till\u00e5ter alla variabler i pom, men sk\u00e4r ocks\u00e5 bort en hel del annan information som bara beh\u00f6vs vid byggandet och inte vid import av publicerade artefakter till andra projekt. Dessutom \"utj\u00e4mnar\" pluginen alla parent-child beroenden, och resultatet blir platta pom som inkluderar allt som beh\u00f6vs. Nackdelen var att den sk\u00e4r bort f\u00f6r mycket \"\u00f6verfl\u00f6dig\" information som inte passade oss alls. Efter att ha studerat informationen om utvecklingen av denna plugin, visade det sig att vi inte var ensamma i universum, och redan i augusti 2018 skapades en pull-request i pluginens GitHub-repositorium med \u00f6nskem\u00e5let att ge m\u00f6jlighet att sj\u00e4lva definiera hur man vill \"f\u00f6rst\u00f6ra\" pom.xml. Utvecklarna lyssnade p\u00e5 r\u00f6sterna hos dem som s\u00f6kte, och redan i december med lanseringen av den nya versionen 1.1.0 kom ett nytt l\u00e4ge resolveCiFriendliesOnly till flatten-maven-plugin, vilket kom l\u00e4gligt \u2013 det l\u00e4mnar pom.xml som den \u00e4r, f\u00f6rutom elementet <i>&lt;version&gt;<\/i> och till\u00e5ter <i>${revision}<\/i>, <i>${sha1}<\/i> och <i>${changelist}<\/i>.<\/p>\n<p>Vi l\u00e4gger till pluginen i projektet<\/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>Klart!<\/p>\n<h4>Lyckligt slut<\/h4>\n<p>\nFr\u00e5n och med nu, f\u00f6r att \u00e4ndra versionen av hela projektet och informera alla beroenden om det, beh\u00f6ver vi bara redigera elementet &lt;<i>revision<\/i>&gt; i bara en rot <i>pom.xml<\/i>. Vid granskning kommer det inte en hundra eller tv\u00e5 av dessa filer med samma \u00e4ndring, utan en. Dessutom f\u00f6rsvinner behovet av att anv\u00e4nda <i>versions-maven-plugin<\/i>.<br \/>\n<br \/>K\u00e4lla: <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.4 - 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\/sv\/blog\/administrirovanie\/opyt-ispolzovaniya-flatten-maven-plugin-dlya-uproshheniya-versionirovaniya-v-maven-proektah\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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\udd47Erfarenhet av att anv\u00e4nda flatten-maven-plugin f\u00f6r att f\u00f6renkla versionering i maven-projekt | ProHoster","description":"Om oss P\u00e5 1C utvecklar vi inte bara 1C: Enterprise-plattformen p\u00e5","canonical_url":"https:\/\/prohoster.info\/sv\/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":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/32476","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=32476"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/32476\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/24280"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=32476"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=32476"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=32476"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}