{"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\/fr\/blog\/administrirovanie\/opyt-ispolzovaniya-flatten-maven-plugin-dlya-uproshheniya-versionirovaniya-v-maven-proektah","title":{"rendered":"Exp\u00e9rience d'utilisation de flatten-maven-plugin pour simplifier la gestion des versions dans les projets Maven.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h4>Alconost s'occupe professionnellement de<\/h4>\n<p>\nDans 1C, nous d\u00e9veloppons non seulement la plateforme. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/269611\/\">1C: Entreprise<\/a><\/noindex> sur <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/429678\/\">C++<\/a><\/noindex> et <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/315414\/\">JavaScript<\/a><\/noindex>, mais aussi des applications en Java \u2013 en particulier un nouvel environnement de d\u00e9veloppement. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/323508\/\">Outils de d\u00e9veloppement d'entreprise<\/a><\/noindex> bas\u00e9s sur Eclipse et un serveur profond\u00e9ment int\u00e9gr\u00e9 \u00e0 la plateforme de messagerie \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/422903\/\">Syst\u00e8mes d'Interaction<\/a><\/noindex>.<\/p>\n<h4>Introduction<\/h4>\n<p>\nEn tant que syst\u00e8me de construction pour les applications Java, nous utilisons le plus souvent Maven, et dans cet article, nous aimerions parler d'un des probl\u00e8mes rencontr\u00e9s lors de l'organisation du d\u00e9veloppement, ainsi que d'une approche qui a permis de surmonter ce probl\u00e8me.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>Pr\u00e9alables et processus de travail<\/h4>\n<p>\nEn raison de la sp\u00e9cificit\u00e9 de d\u00e9veloppement dans nos projets Maven, nous utilisons assez de modules, de d\u00e9pendances et de sous-projets. Le nombre de fichiers POM dans un arbre peut se compter par dizaines, voire centaines.<\/p>\n<p><img decoding=\"async\" alt=\"Exp\u00e9rience d&#039;utilisation de flatten-maven-plugin pour simplifier la gestion des versions dans les projets Maven.\" src=\"\/wp-content\/uploads\/2019\/04\/60eddb63fb9bd58eda2edc890e2f771f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCela semble inoffensif : une fois cr\u00e9\u00e9, on l'oublie. S'il faut changer ou ajouter quelque chose dans tous les fichiers en m\u00eame temps, il existe de nombreux outils pratiques dans les \u00e9diteurs et les IDE. Quelle est la modification r\u00e9guli\u00e8re la plus courante du pom.xml ? Nous pensons qu'il s'agit du changement de versions des projets et des d\u00e9pendances. Peut-\u00eatre que quelqu'un voudra contester cela, mais c'est ainsi que \u00e7a se passe chez nous. La raison en est que, parall\u00e8lement au c\u0153ur, nous d\u00e9veloppons de nombreuses biblioth\u00e8ques internes, et pour une reproductibilit\u00e9 constante des r\u00e9sultats de construction et de test, l'utilisation de snapshots ne nous semble pas pratique. C'est pourquoi nous devons augmenter le num\u00e9ro de version dans les projets \u00e0 chaque construction.<\/p>\n<p>Le d\u00e9veloppeur a \u00e9galement parfois besoin de construire sa propre branche de n'importe quelle biblioth\u00e8que et de v\u00e9rifier son bon fonctionnement avec toutes les d\u00e9pendances, pour cela il faut manuellement changer la version dans chacune d'elles.<\/p>\n<h4>Solution initiale<\/h4>\n<p>\nAvec ces changements fr\u00e9quents et multiples de versions, le processus dans le cadre du CI souhaite \u00eatre simplifi\u00e9 et automatis\u00e9. C'est l\u00e0 qu'un plugin public connu se pr\u00e9sente comme une aide. <i>versions-maven-plugin<\/i> \u2013 nous l'ajoutons et le lan\u00e7ons <\/p>\n<p><i>mvn -N versions:set -DnewVersion=2.0.1 <\/i><\/p>\n<p>et Maven fera tout comme il se doit : il parcourra la hi\u00e9rarchie de haut en bas, remplacera toutes les versions \u2013 superbe ! Maintenant, il ne reste plus qu'\u00e0 soumettre la pull request, les coll\u00e8gues examineront les modifications, et nous pourrons rapidement nous int\u00e9grer dans le trunk. Rapidement ? Pas si s\u00fbr. Quelques centaines. <i>pom.xml<\/i> Lors de la r\u00e9vision, sans compter le code. De plus, personne n'est \u00e0 l'abri des conflits de fusion avec un si grand nombre de fichiers modifi\u00e9s. Il convient de noter qu'au cours du processus d'int\u00e9gration continue, les changements de version se produisent automatiquement en m\u00eame temps que les modifications de fonctionnalit\u00e9, et non s\u00e9par\u00e9ment.<\/p>\n<h4>Nouvelles fonctionnalit\u00e9s<\/h4>\n<p>\nNous avons \u00e9t\u00e9 tranquilles un certain temps et, r\u00e9sign\u00e9s, avons continu\u00e9 \u00e0 vivre ainsi, jusqu'\u00e0 ce que les gars de <noindex><a rel=\"nofollow\" href=\"http:\/\/maven.apache.org\/\">Maven Apache Project<\/a><\/noindex> n'int\u00e8grent dans Maven, \u00e0 partir de la version 3.5.0-beta-1, le support des 'rempla\u00e7ants' de version (placeholders). Le principe de ces rempla\u00e7ants est que <i>pom.xml<\/i> au lieu d'indiquer une version sp\u00e9cifique du projet, des variables sont utilis\u00e9es, <i>${revision}<\/i>, <i>${sha1}<\/i> et <i>${changelist}<\/i>. Les valeurs de ces propri\u00e9t\u00e9s sont d\u00e9finies soit dans l'\u00e9l\u00e9ment &lt;<i>properties<\/i>&gt;, soit elles peuvent \u00eatre d\u00e9finies via une propri\u00e9t\u00e9 syst\u00e8me.<\/p>\n<p><i>mvn -Drevision=2.0.0 clean package<\/i><\/p>\n<p>Les valeurs des propri\u00e9t\u00e9s syst\u00e8me ont la priorit\u00e9 sur les valeurs d\u00e9finies dans &lt;<i>properties<\/i>&gt;.<\/p>\n<p><i><b>Parent<\/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>Enfant<\/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>Si vous souhaitez construire la version 2.0.0-SNAPSHOT, vous utilisez simplement <\/p>\n<p><i>\u00a0\u00a0\u00a0\u00a0mvn -Drevision=2.0.0 clean package<\/i><\/p>\n<p>Si vous souhaitez faire un release, il suffit de r\u00e9initialiser le SNAPSHOT. <\/p>\n<p><i>\u00a0\u00a0\u00a0\u00a0mvn -Dchangelist= clean package<\/i><\/p>\n<p>*Les exemples ci-dessus sont tir\u00e9s de <noindex><a rel=\"nofollow\" href=\"https:\/\/maven.apache.org\/maven-ci-friendly.html\">article<\/a><\/noindex> sur le site Maven Apache Project.<\/p>\n<h4>La dure r\u00e9alit\u00e9<\/h4>\n<p>\nTout est bien et bon, il est temps de ressentir un sentiment de satisfaction, mais non. Il s'av\u00e8re que cette m\u00e9thode ne convient pas pour install et deploy, car les descriptions des artefacts publi\u00e9s dans le d\u00e9p\u00f4t ne remplaceront pas <i>${revision}<\/i> par sa valeur et Maven ne comprendra plus de quoi il s'agit.<\/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>La lumi\u00e8re au bout du tunnel<\/h4>\n<p>\nIl faut chercher une solution. La situation pourrait \u00eatre sauv\u00e9e par <noindex><a rel=\"nofollow\" href=\"https:\/\/www.mojohaus.org\/flatten-maven-plugin\/\">flatten-maven-plugin<\/a><\/noindex>. Ce plugin permet de r\u00e9soudre toutes les variables dans le pom, mais il coupe \u00e9galement beaucoup d'autres informations qui ne sont n\u00e9cessaires que lors de la construction et qui ne sont pas n\u00e9cessaires lors de l'importation des artefacts publi\u00e9s dans d'autres projets. De plus, le plugin \u00ab aplanit \u00bb toutes les d\u00e9pendances parent-enfant, et au final, on obtient des pom plats qui incluent tout ce qui est n\u00e9cessaire. Le probl\u00e8me \u00e9tait qu'il \u00e9tait trop destructeur en supprimant trop d'\u00e9l\u00e9ments non souhait\u00e9s, ce qui ne nous convenait pas du tout. Apr\u00e8s avoir \u00e9tudi\u00e9 les informations sur le d\u00e9veloppement de ce plugin, il s'est av\u00e9r\u00e9 que nous n'\u00e9tions pas seuls dans l'univers, et d\u00e9j\u00e0 en ao\u00fbt 2018, un pull-request avait \u00e9t\u00e9 cr\u00e9\u00e9 sur GitHub dans le d\u00e9p\u00f4t du plugin, demandant la possibilit\u00e9 de d\u00e9finir soi-m\u00eame comment \u00ab d\u00e9former \u00bb le pom.xml. Les d\u00e9veloppeurs ont \u00e9cout\u00e9 les voix des n\u00e9cessiteux, et d\u00e9j\u00e0 en d\u00e9cembre, avec la sortie de la nouvelle version 1.1.0 du flatten-maven-plugin, un nouveau mode resolveCiFriendliesOnly a \u00e9t\u00e9 introduit, qui convient comme jamais \u2013 il laisse le pom.xml tel quel, \u00e0 l'exception de l'\u00e9l\u00e9ment <i>&lt;version&gt;<\/i> et permet <i>${revision}<\/i>, <i>${sha1}<\/i> et <i>${changelist}<\/i>.<\/p>\n<p>Ajoutons le plugin au projet<\/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>C'est fait !<\/p>\n<h4>Happy end<\/h4>\n<p>\nD\u00e9sormais, pour changer la version de l'ensemble du projet et en informer toutes les d\u00e9pendances, il suffit de modifier l'\u00e9l\u00e9ment &lt;<i>revision<\/i>&gt; dans un seul pom racine <i>pom.xml<\/i>. Ainsi, un seul fichier arrive pour r\u00e9vision plut\u00f4t qu'une centaine de fichiers avec des modifications identiques. De plus, la n\u00e9cessit\u00e9 d'utiliser <i>versions-maven-plugin<\/i>.<br \/>\n<br \/>Source : <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.2 - 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\/fr\/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.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/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\udd47Exp\u00e9rience avec le flatten-maven-plugin pour simplifier le versionnage dans les projets maven | ProHoster","description":"\u00c0 propos De 1C, nous d\u00e9veloppons non seulement la plateforme 1C: Entreprise sur","canonical_url":"https:\/\/prohoster.info\/fr\/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":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/32476","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=32476"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/32476\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/24280"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=32476"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=32476"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=32476"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}