{"id":37216,"date":"2018-06-20T03:10:36","date_gmt":"2018-06-20T10:10:36","guid":{"rendered":"https:\/\/www.exoplatform.com\/blog\/?p=16117"},"modified":"2023-07-16T15:57:42","modified_gmt":"2023-07-16T13:57:42","slug":"safely-manage-the-database-for-your-exo-add-ons-with-liquibase-maven-plugin","status":"publish","type":"post","link":"https:\/\/www.exoplatform.com\/blog\/safely-manage-the-database-for-your-exo-add-ons-with-liquibase-maven-plugin\/","title":{"rendered":"Safely manage the database for your eXo add-ons with Liquibase Maven Plugin"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"37216\" class=\"elementor elementor-37216\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-section elementor-top-section elementor-element elementor-element-eef7c0a elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"eef7c0a\" data-element_type=\"section\" id=\"sec-image-title\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-b945291\" data-id=\"b945291\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4765822 elementor-align-left elementor-widget elementor-widget-post-info\" data-id=\"4765822\" data-element_type=\"widget\" id=\"author-time\" data-widget_type=\"post-info.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<link rel=\"stylesheet\" href=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/plugins\/elementor\/assets\/css\/widget-icon-list.min.css\"><link rel=\"stylesheet\" href=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/plugins\/elementor-pro\/assets\/css\/widget-theme-elements.min.css\">\t\t<ul class=\"elementor-inline-items elementor-icon-list-items elementor-post-info\">\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item elementor-repeater-item-a070ed2 elementor-inline-item\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text elementor-post-info__item elementor-post-info__item--type-custom\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"bsf-rt-reading-time\"><span class=\"bsf-rt-display-label\" prefix=\"Reading Time\">\n\t\t<\/span> <span class=\"bsf-rt-display-time\" reading_time=\"4\"><\/span> \n\t\t<span class=\"bsf-rt-display-postfix\" postfix=\"min\"><\/span><\/span>\n\t\t  \n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t<li class=\"elementor-icon-list-item elementor-repeater-item-c638fde elementor-inline-item\" itemprop=\"author\">\n\t\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/author\/kmenzli\/\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text elementor-post-info__item elementor-post-info__item--type-author\">\n\t\t\t\t\t\t\t\t\t\tKhemais Menzli\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t<\/li>\n\t\t\t\t<li class=\"elementor-icon-list-item elementor-repeater-item-f24db26 elementor-inline-item\" itemprop=\"datePublished\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-calendar\"><\/i>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text elementor-post-info__item elementor-post-info__item--type-date\">\n\t\t\t\t\t\t\t\t\t\tjuin 20, 2018\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t<\/ul>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-3b99c18 undertitle elementor-widget elementor-widget-heading\" data-id=\"3b99c18\" data-element_type=\"widget\" id=\"bigtitle\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<style>\/*! elementor - v3.13.2 - 11-05-2023 *\/\r\n.elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title[class*=elementor-size-]>a{color:inherit;font-size:inherit;line-height:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}<\/style><h1 class=\"elementor-heading-title elementor-size-default\">Safely manage the database for your eXo add-ons with Liquibase Maven Plugin\n<\/h1>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-206566b elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"206566b\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<style>\/*! elementor - v3.13.2 - 11-05-2023 *\/\r\n.elementor-widget-divider{--divider-border-style:none;--divider-border-width:1px;--divider-color:#0c0d0e;--divider-icon-size:20px;--divider-element-spacing:10px;--divider-pattern-height:24px;--divider-pattern-size:20px;--divider-pattern-url:none;--divider-pattern-repeat:repeat-x}.elementor-widget-divider .elementor-divider{display:flex}.elementor-widget-divider .elementor-divider__text{font-size:15px;line-height:1;max-width:95%}.elementor-widget-divider .elementor-divider__element{margin:0 var(--divider-element-spacing);flex-shrink:0}.elementor-widget-divider .elementor-icon{font-size:var(--divider-icon-size)}.elementor-widget-divider .elementor-divider-separator{display:flex;margin:0;direction:ltr}.elementor-widget-divider--view-line_icon .elementor-divider-separator,.elementor-widget-divider--view-line_text .elementor-divider-separator{align-items:center}.elementor-widget-divider--view-line_icon .elementor-divider-separator:after,.elementor-widget-divider--view-line_icon .elementor-divider-separator:before,.elementor-widget-divider--view-line_text .elementor-divider-separator:after,.elementor-widget-divider--view-line_text .elementor-divider-separator:before{display:block;content:\"\";border-bottom:0;flex-grow:1;border-top:var(--divider-border-width) var(--divider-border-style) var(--divider-color)}.elementor-widget-divider--element-align-left .elementor-divider .elementor-divider-separator>.elementor-divider__svg:first-of-type{flex-grow:0;flex-shrink:100}.elementor-widget-divider--element-align-left .elementor-divider-separator:before{content:none}.elementor-widget-divider--element-align-left .elementor-divider__element{margin-left:0}.elementor-widget-divider--element-align-right .elementor-divider .elementor-divider-separator>.elementor-divider__svg:last-of-type{flex-grow:0;flex-shrink:100}.elementor-widget-divider--element-align-right .elementor-divider-separator:after{content:none}.elementor-widget-divider--element-align-right .elementor-divider__element{margin-right:0}.elementor-widget-divider:not(.elementor-widget-divider--view-line_text):not(.elementor-widget-divider--view-line_icon) .elementor-divider-separator{border-top:var(--divider-border-width) var(--divider-border-style) var(--divider-color)}.elementor-widget-divider--separator-type-pattern{--divider-border-style:none}.elementor-widget-divider--separator-type-pattern.elementor-widget-divider--view-line .elementor-divider-separator,.elementor-widget-divider--separator-type-pattern:not(.elementor-widget-divider--view-line) .elementor-divider-separator:after,.elementor-widget-divider--separator-type-pattern:not(.elementor-widget-divider--view-line) .elementor-divider-separator:before,.elementor-widget-divider--separator-type-pattern:not([class*=elementor-widget-divider--view]) .elementor-divider-separator{width:100%;min-height:var(--divider-pattern-height);-webkit-mask-size:var(--divider-pattern-size) 100%;mask-size:var(--divider-pattern-size) 100%;-webkit-mask-repeat:var(--divider-pattern-repeat);mask-repeat:var(--divider-pattern-repeat);background-color:var(--divider-color);-webkit-mask-image:var(--divider-pattern-url);mask-image:var(--divider-pattern-url)}.elementor-widget-divider--no-spacing{--divider-pattern-size:auto}.elementor-widget-divider--bg-round{--divider-pattern-repeat:round}.rtl .elementor-widget-divider .elementor-divider__text{direction:rtl}.e-con-inner>.elementor-widget-divider,.e-con>.elementor-widget-divider{width:var(--container-widget-width,100%);--flex-grow:var(--container-widget-flex-grow)}<\/style>\t\t<div class=\"elementor-divider\">\r\n\t\t\t<span class=\"elementor-divider-separator\">\r\n\t\t\t\t\t\t<\/span>\r\n\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-f80e79c elementor-widget elementor-widget-text-editor\" data-id=\"f80e79c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<style>\/*! elementor - v3.13.2 - 11-05-2023 *\/\r\n.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#69727d;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#69727d;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}<\/style>\t\t\t\tA while ago, <strong>eXo<\/strong> introduced <a href=\"https:\/\/www.liquibase.org\/\" target=\"_blank\" rel=\"noopener\">Liquibase<\/a> to evolve the database schema safely in the product. A built-in component has been provided within the <a style=\"color: #2f5e92; text-decoration: underline;\" href=\"https:\/\/github.com\/exoplatform\/commons\" target=\"_blank\" rel=\"noopener\">eXo commons<\/a> project to let <strong>Liquibase perform database<\/strong> schema changes between versions of <strong>eXo Platform<\/strong>. However, it was designed to automate upgrades at runtime and not necessarily to support all kinds of operations that are needed at development time as an <strong>add-on developer<\/strong> iterates on his code.\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-column elementor-col-66 elementor-top-column elementor-element elementor-element-fc334be\" data-id=\"fc334be\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7146f9c elementor-widget elementor-widget-image\" data-id=\"7146f9c\" data-element_type=\"widget\" data-widget_type=\"image.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<style>\/*! elementor - v3.13.2 - 11-05-2023 *\/\r\n.elementor-widget-image{text-align:center}.elementor-widget-image a{display:inline-block}.elementor-widget-image a img[src$=\".svg\"]{width:48px}.elementor-widget-image img{vertical-align:middle;display:inline-block}<\/style>\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/elementor\/thumbs\/liqui-800x533-1-q0ejiwlpfdzcvktikia3lualajs69ngng9tv6hptoo.png\" title=\"Safely manage the database for your eXo add-ons with Liquibase Maven Plugin\" alt=\"eXo add-on developer, Liquibase Maven Plugin\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6804200 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6804200\" data-element_type=\"section\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-4a7065b\" data-id=\"4a7065b\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6b69329 table-content-cs elementor-widget elementor-widget-table-of-contents\" data-id=\"6b69329\" data-element_type=\"widget\" id=\"sticky-tds\" data-settings=\"{&quot;exclude_headings_by_selector&quot;:&quot;.am__title&quot;,&quot;marker_view&quot;:&quot;bullets&quot;,&quot;min_height&quot;:{&quot;unit&quot;:&quot;vh&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;_animation&quot;:&quot;none&quot;,&quot;icon&quot;:{&quot;value&quot;:&quot;&quot;,&quot;library&quot;:&quot;&quot;},&quot;min_height_tablet&quot;:{&quot;unit&quot;:&quot;vh&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_mobile&quot;:{&quot;unit&quot;:&quot;vh&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;headings_by_tags&quot;:[&quot;h2&quot;,&quot;h3&quot;],&quot;hierarchical_view&quot;:&quot;yes&quot;}\" data-widget_type=\"table-of-contents.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<style>\/*! elementor-pro - v3.8.2 - 21-11-2022 *\/\n.elementor-widget-table-of-contents .elementor-toc__header-title{color:var(--header-color)}.elementor-widget-table-of-contents.elementor-toc--collapsed .elementor-toc__toggle-button--collapse,.elementor-widget-table-of-contents:not(.elementor-toc--collapsed) .elementor-toc__toggle-button--expand{display:none}.elementor-widget-table-of-contents .elementor-widget-container{min-height:var(--box-min-height);border:var(--box-border-width,1px) solid var(--box-border-color,#a4afb7);border-radius:var(--box-border-radius,3px);background-color:var(--box-background-color);-webkit-transition:min-height .4s;-o-transition:min-height .4s;transition:min-height .4s;overflow:hidden}.elementor-toc__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:var(--box-padding,20px);background-color:var(--header-background-color);border-bottom:var(--separator-width,1px) solid var(--box-border-color,#a4afb7)}.elementor-toc__header-title{font-size:18px;margin:0;color:var(--header-color)}.elementor-toc__toggle-button{cursor:pointer;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.elementor-toc__toggle-button i{color:var(--toggle-button-color)}.elementor-toc__toggle-button svg{height:1em;width:1em;fill:var(--toggle-button-color)}.elementor-toc__spinner-container{text-align:center}.elementor-toc__spinner{font-size:2em}.elementor-toc__spinner.e-font-icon-svg{height:1em;width:1em}.elementor-toc__body{padding:var(--box-padding,20px);max-height:var(--toc-body-max-height);overflow-y:auto}.elementor-toc__body::-webkit-scrollbar{width:7px}.elementor-toc__body::-webkit-scrollbar-thumb{background-color:#c2cbd2;border-radius:10px}.elementor-toc__list-wrapper{list-style:none;padding:0}.elementor-toc__list-item{margin-bottom:.5em}.elementor-toc__list-item.elementor-item-active{font-weight:700}.elementor-toc__list-item .elementor-toc__list-wrapper{margin-top:.5em;margin-left:var(--nested-list-indent,1em)}.elementor-toc__list-item-text:hover{color:var(--item-text-hover-color);-webkit-text-decoration:var(--item-text-hover-decoration);text-decoration:var(--item-text-hover-decoration)}.elementor-toc__list-item-text.elementor-item-active{color:var(--item-text-active-color);-webkit-text-decoration:var(--item-text-active-decoration);text-decoration:var(--item-text-active-decoration)}.elementor-toc__list-item-text-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.elementor-toc__list-item-text-wrapper:before,.elementor-toc__list-item-text-wrapper i{margin-right:8px;color:var(--marker-color)}.elementor-toc__list-item-text-wrapper svg{margin-right:8px;fill:var(--marker-color);height:var(--marker-size,.5em);width:var(--marker-size,.5em)}.elementor-toc__list-item-text-wrapper i{font-size:var(--marker-size,.5em)}.elementor-toc__list-item-text-wrapper:before{font-size:var(--marker-size,1em)}.elementor-toc--content-ellipsis .elementor-toc__list-item-text{white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-toc__list-items--collapsible>.elementor-toc__list-wrapper>.elementor-toc__list-item>.elementor-toc__list-wrapper{display:none}.elementor-toc__heading-anchor{position:absolute}.elementor-toc__body .elementor-toc__list-item-text{color:var(--item-text-color);-webkit-text-decoration:var(--item-text-decoration);text-decoration:var(--item-text-decoration)}.elementor-toc__body .elementor-toc__list-item-text:hover{color:var(--item-text-hover-color);-webkit-text-decoration:var(--item-text-hover-decoration);text-decoration:var(--item-text-hover-decoration)}.elementor-toc__body .elementor-toc__list-item-text.elementor-item-active{color:var(--item-text-active-color);-webkit-text-decoration:var(--item-text-active-decoration);text-decoration:var(--item-text-active-decoration)}ol.elementor-toc__list-wrapper{counter-reset:item}ol.elementor-toc__list-wrapper .elementor-toc__list-item{counter-increment:item}ol.elementor-toc__list-wrapper .elementor-toc__list-item-text-wrapper:before{content:counters(item,\".\") \". \"}<\/style>\t\t<div class=\"elementor-toc__header\">\n\t\t\t<h4 class=\"elementor-toc__header-title\">\n\t\t\t\tContent\t\t\t<\/h4>\n\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-toc__body\">\n\t\t\t<div class=\"elementor-toc__spinner-container\">\n\t\t\t\t<i class=\"elementor-toc__spinner eicon-animation-spin eicon-loading\" aria-hidden=\"true\"><\/i>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-0e76ec5\" data-id=\"0e76ec5\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a2bb3e0 elementor-widget elementor-widget-text-editor\" data-id=\"a2bb3e0\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tAt the <strong>heart of Liquibase<\/strong> is the <a href=\"http:\/\/www.liquibase.org\/documentation\/databasechangelog.html\" target=\"_blank\" rel=\"noopener\">Database Change Log File<\/a>. It\u2019s an xml file that contains instructions to track successive database schema updates. As an <strong>add-on developer<\/strong>, I found that manually maintaining it can be time consuming and error prone. Fortunately, I found a very handy maven plugin is available that made my life easier. If you are an <strong>eXo add-on developer<\/strong>, read on to learn how I remained highly productive, while dealing with a volatile database schema in an early-stage add-on project.\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-60b0ec0 myheader1 elementor-widget elementor-widget-heading\" data-id=\"60b0ec0\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">So what do you have for us?\n<\/h2>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-938abf3 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"938abf3\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"elementor-divider\">\r\n\t\t\t<span class=\"elementor-divider-separator\">\r\n\t\t\t\t\t\t<\/span>\r\n\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-cbbd1b3 elementor-widget elementor-widget-text-editor\" data-id=\"cbbd1b3\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\t<p>Well, to be honest, there is no a silver bullet. BUT, Liquibase itself comes with a set of awesome features such as the <strong>Liquibase Maven plugin<\/strong>.<\/p>\n&nbsp;\n<p>Instead of writing the change log file manually, we can use the Liquibase Maven plugin to generate it and save ourselves a lot of work. I want to illustrate this by means of an example. In the early stage of the development of a new eXo add-on I am currently working on, the data model was not always stable. It had to evolve frequently as I was implementing some moving requirements. Agility is cool, but updating the change log file quickly became a painful task for me.<\/p>\n&nbsp;\n<p>With my team, we decided to use Liquibase Maven plugin as a \u2018Swiss Army Knife\u2019 for several common tasks, to:<\/p>\n&nbsp;\n<ul style=\"list-style: disc; margin-left: 20px!important;\">\n \t<li style=\"font-weight: 400;\">Generate a changelog from an existing database<\/li>\n \t<li style=\"font-weight: 400;\">Generate a changelog from diff between two databases<\/li>\n \t<li style=\"font-weight: 400;\">Generate a changelog from diffs between a database and JPA entities<\/li>\n<\/ul>\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-3b214ac elementor-widget elementor-widget-heading\" data-id=\"3b214ac\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Generate a changelog from an existing database\n<\/h3>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-3e431c2 elementor-widget elementor-widget-text-editor\" data-id=\"3e431c2\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tThe first step that every developer wants to test\/validate is to generate a changelog from an existing database. Typically, you create your database schema with SQL commands or using an UI frontend and you need a way to easily replicate this in your development environment. In this situation <strong>liquibase-maven-plugin<\/strong> comes with a built-in Maven goal, called generateChangeLog\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-6fa158d elementor-widget elementor-widget-heading\" data-id=\"6fa158d\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-25828\" src=\"https:\/\/www-dev.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/pucejaune.jpg\" alt=\"\" width=\"7\" height=\"6\" \/>  Command Line\n<\/h4>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-37b80a7 elementor-widget elementor-widget-text-editor\" data-id=\"37b80a7\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tmvn liquibase:generateChangeLog\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-cabd2a9 elementor-widget elementor-widget-heading\" data-id=\"cabd2a9\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-25828\" src=\"https:\/\/www-dev.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/pucejaune.jpg\" alt=\"\" width=\"7\" height=\"6\" \/>  Plugin Configuration\n<\/h4>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-35a2bae elementor-widget elementor-widget-text-editor\" data-id=\"35a2bae\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tConfiguring the plugin comes down to adding the following entry:<strong>&lt;outputChangeLogFile&gt; <\/strong>to the plugin\u2019s configuration:\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-76edbdf elementor-widget elementor-widget-code-highlight\" data-id=\"76edbdf\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp><outputChangeLogFile>\r\n\r\n${basedir}\/src\/main\/resources\/db\/changelog\/myaddon.db.changelog.xml<\/output\r\n\r\nChangeLogFile><\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-67d61f7 elementor-widget elementor-widget-text-editor\" data-id=\"67d61f7\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tThe expected output is a changelog file that we can use to create an initial database schema or to populate data as well.\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-b9a8243 elementor-widget elementor-widget-code-highlight\" data-id=\"b9a8243\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp><?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<databaseChangeLog xmlns=\"http:\/\/www.liquibase.org\/xml\/ns\/dbchangelog\"\r\n                  xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\r\n                  xsi:schemaLocation=\"http:\/\/www.liquibase.org\/xml\/ns\/dbchangelog\r\n                      http:\/\/www.liquibase.org\/xml\/ns\/dbchangelog\/dbchangelog-3.3.xsd\">\r\n \r\n   <!-- Managing auto generation of timestamp by Database -->\r\n   <property name=\"now\" value=\"now()\" dbms=\"mysql\"\/>\r\n   <property name=\"autoIncrement\" value=\"true\"\/>\r\n \r\n   <!-- Definition of BADGE table -->\r\n   <changeSet author=\"myaddon\" id=\"1.0.0-1\">\r\n       <createTable tableName=\"BADGE\">\r\n           <column name=\"ID\" type=\"bigint\" autoIncrement=\"${autoIncrement}\">\r\n               <constraints primaryKey=\"true\" nullable=\"false\"\/>\r\n           <\/column>\r\n           <column name=\"TITLE\" type=\"NVARCHAR(32)\">\r\n               <constraints nullable=\"false\" unique=\"true\"\/>\r\n           <\/column>\r\n           <column name=\"DESCRIPTION\" type=\"NVARCHAR(255)\">\r\n               <constraints nullable=\"false\"\/>\r\n           <\/column>\r\n           <column name=\"NEEDED_SCORE\" type=\"BIGINT\">\r\n               <constraints nullable=\"false\"\/>\r\n           <\/column>\r\n       <\/createTable>\r\n        <modifySql dbms=\"mysql\">\r\n           <append value=\" ENGINE=INNODB CHARSET=UTF8 COLLATE utf8_general_ci\"\/>\r\n       <\/modifySql>\r\n   <\/changeSet>\r\n<\/databaseChangeLog><\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-5e3f851 elementor-widget elementor-widget-heading\" data-id=\"5e3f851\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Generate a changelog from diff between two databases\n<\/h3>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-ad8f8eb elementor-widget elementor-widget-text-editor\" data-id=\"ad8f8eb\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\t<p>In some situations, typically when we need to update a database schema already used in production, we can use the plugin to generate a changelog file from the differences between two existing databases:<\/p>\n&nbsp;\n<ol style=\"list-style: dis; margin-left: 20px!important;\">\n \t<li style=\"font-weight: 400;\">The development database which contains the adaptation<\/li>\n \t<li style=\"font-weight: 400;\">The production database which contains the latest version of the schema<\/li>\n<\/ol>\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-b3d15ca elementor-widget elementor-widget-heading\" data-id=\"b3d15ca\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-25828\" src=\"https:\/\/www-dev.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/pucejaune.jpg\" alt=\"\" width=\"7\" height=\"6\" \/> Command Line\n<\/h4>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-8525da9 elementor-widget elementor-widget-text-editor\" data-id=\"8525da9\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tmvn liquibase:diff\n\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-84450a7 elementor-widget elementor-widget-heading\" data-id=\"84450a7\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-25828\" src=\"https:\/\/www-dev.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/pucejaune.jpg\" alt=\"\" width=\"7\" height=\"6\" \/> Plugin Configuration\n<\/h4>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-6dabd2f elementor-widget elementor-widget-text-editor\" data-id=\"6dabd2f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tLiquibase&#8217;s plugin configuration should be adapted as follows:\n\n&nbsp;\n<ol style=\"list-style: dis; margin-left: 20px!important;\">\n \t<li style=\"font-weight: 400;\">Add an entry <strong>&lt;diffChangeLogFile&gt;<\/strong> to specify where the <strong>changeLog<\/strong> will be generated<\/li>\n \t<li style=\"font-weight: 400;\">Configure base DB<\/li>\n<\/ol>\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-802949e elementor-widget elementor-widget-code-highlight\" data-id=\"802949e\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp> <driver>com.mysql.jdbc.Driver<\/driver>\r\n              <url>jdbc:mysql:\/\/localhost:3306\/tribe<\/url>\r\n              <defaultSchemaName>tribe<\/defaultSchemaName>\r\n              <username>root<\/username>\r\n              <password><\/password><\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-30a513f elementor-widget elementor-widget-text-editor\" data-id=\"30a513f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\t<ol start=\"3\" style=\"list-style: dis; margin-left: 20px!important;\">\n \t<li style=\"font-weight: 400;\">Configure reference DB<\/li>\n<\/ol>\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-87deb29 elementor-widget elementor-widget-code-highlight\" data-id=\"87deb29\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp><referenceUrl>jdbc:mysql:\/\/localhost:3306\/local<\/referenceUrl>\r\n<referenceDriver>com.mysql.jdbc.Driver<\/referenceDriver>\r\n<referenceUsername>root<\/referenceUsername>\r\n<referencePassword><\/referencePassword><\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-d3e84b0 elementor-widget elementor-widget-text-editor\" data-id=\"d3e84b0\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tHere\u2019s a snippet of the plugin\u2019s configuration we used within my addon :\n\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-4dd9dca elementor-widget elementor-widget-code-highlight\" data-id=\"4dd9dca\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp><configuration>\r\n   <changeLogFile>${basedir}\/src\/main\/resources\/db\/changelog\/\r\nmyaddon.db.changelog-master.xml<\/changeLogFile>\r\n   <diffChangeLogFile>${basedir}\/src\/main\/resources\/db\/changelog\/myaddon.db.changelog-${maven.build.timestamp}.xml<\/diffChangeLogFile>\r\n   <outputChangeLogFile>${basedir}\/src\/main\/resources\/db\/changelog\/myaddon.db.changelog.xml<\/outputChangeLogFile>\r\n   <driver>com.mysql.jdbc.Driver<\/driver>\r\n   <url>jdbc:mysql:\/\/localhost:3306\/tribe<\/url>\r\n   <defaultSchemaName>tribe<\/defaultSchemaName>\r\n   <username>root<\/username>\r\n   <password><\/password>\r\n   <!--\r\n        <referenceUrl>hibernate:classic:org.exoplatform.myaddon.entities.domain.configuration?dialect=org.hibernate.dialect.MySQLDialect<\/referenceUrl>\r\n    -->\r\n   <referenceUrl>jdbc:mysql:\/\/localhost:3306\/tribe-ref<\/referenceUrl>\r\n   <referenceDriver>com.mysql.jdbc.Driver<\/referenceDriver>\r\n   <referenceUsername>root<\/referenceUsername>\r\n   <referencePassword><\/referencePassword>\r\n   <verbose>true<\/verbose>\r\n   <logging>debug<\/logging>\r\n<\/configuration><\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-d7f2ab8 elementor-widget elementor-widget-text-editor\" data-id=\"d7f2ab8\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tThe output is a changelog file that contains changes against the old schema.\n\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-03bbf37 elementor-widget elementor-widget-heading\" data-id=\"03bbf37\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Generate a changelog from diffs between a database and JPA entities\n<\/h3>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-c6bf782 elementor-widget elementor-widget-text-editor\" data-id=\"c6bf782\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\t<p>The most expected feature provided by <strong>Liquibase Maven Plugin<\/strong> when coupled with the <strong>Liquibase Hibernate Plugin<\/strong> is the way of generating the changelog from JPA entities. The goal is to generate a changelog file from the differences between an existing database (for example production) and our new persistence entities.<\/p>\n&nbsp;\n<p><strong>Note<\/strong>: It is important to emphasise that developers have to check the consistency of generated changesets and adapt them if necessary.<\/p>\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-98e4980 elementor-widget elementor-widget-heading\" data-id=\"98e4980\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-25828\" src=\"https:\/\/www-dev.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/pucejaune.jpg\" alt=\"\" width=\"7\" height=\"6\" \/> Command Line\n<\/h4>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-bcc2a79 elementor-widget elementor-widget-text-editor\" data-id=\"bcc2a79\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tmvn liquibase:diff\n\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-3a4cb23 elementor-widget elementor-widget-heading\" data-id=\"3a4cb23\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-25828\" src=\"https:\/\/www-dev.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/pucejaune.jpg\" alt=\"\" width=\"7\" height=\"6\" \/> Plugin Configuration\n<\/h4>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-702fd6c elementor-widget elementor-widget-text-editor\" data-id=\"702fd6c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tThe configuration is quite similar to the conf for 2 different databases, except for <strong>referenceUrl<\/strong> in which we are using JPA persistence unit instead of database url:\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-a39549f elementor-widget elementor-widget-code-highlight\" data-id=\"a39549f\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp><referenceUrl>hibernate:ejb3:exo-pu?hibernate.ejb.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy<\/referenceUrl>\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-3f3d776 elementor-widget elementor-widget-text-editor\" data-id=\"3f3d776\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\t<p><strong>liquibase-hibernate<\/strong> comes with 3 flavours of configuration; please refer to official doc: <a style=\"color: #2f5e92; text-decoration: underline;\" href=\"https:\/\/github.com\/liquibase\/liquibase-hibernate\/wiki\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/liquibase\/liquibase-hibernate\/wiki<\/a><\/p>\n&nbsp;\n<p><strong>Note<\/strong>: It is worth to note that this configuration needs version <strong>3.5.5<\/strong> of <strong>liquibase-core<\/strong> instead of version <strong>3.4.2<\/strong>.<\/p>\n&nbsp;\n<p>The expected output is a changelog file as follows:<\/p>\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-ec6328d elementor-widget elementor-widget-code-highlight\" data-id=\"ec6328d\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp><?xml version=\"1.1\" encoding=\"UTF-8\" standalone=\"no\"?>\r\n<databaseChangeLog xmlns=\"http:\/\/www.liquibase.org\/xml\/ns\/dbchangelog\" \r\n                   xmlns:ext=\"http:\/\/www.liquibase.org\/xml\/ns\/dbchangelog-ext\" \r\n                   xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" \r\n                   xsi:schemaLocation=\"http:\/\/www.liquibase.org\/xml\/ns\/dbchangelog-ext http:\/\/www.liquibase.org\/xml\/ns\/dbchangelog\/dbchangelog-ext.xsd http:\/\/www.liquibase.org\/xml\/ns\/dbchangeloghttp:\/\/www.liquibase.org\/xml\/ns\/dbchangelog\/dbchangelog-3.5.xsd\">\r\n\r\n   <changeSet author=\"exo (generated)\" id=\"1522331789463-190\">\r\n       <dropForeignKeyConstraint baseTableName=\"ntf_email_notifs_params\" constraintName=\"FK_1vfme84il3ryw4e1podyom1gj\"\/>\r\n       <addForeignKeyConstraint baseColumnNames=\"email_notif_id\" baseTableName=\"ntf_email_notifs_params\" constraintName=\"FK_1vfme84il3ryw4e1podyom1gj\"referencedColumnNames=\"email_notif_id\" referencedTableName=\"ntf_email_notifs\"\/>\r\n   <\/changeSet>\r\n   <changeSet author=\"exo (generated)\" id=\"1522331789463-191\">\r\n       <dropForeignKeyConstraint baseTableName=\"ntf_web_notifs_users\" constraintName=\"FK_7dpbsl3tb0ij340uwnplhlv39\"\/>\r\n       <addForeignKeyConstraint baseColumnNames=\"web_notif_id\" baseTableName=\"ntf_web_notifs_users\" constraintName=\"FK_7dpbsl3tb0ij340uwnplhlv39\"referencedColumnNames=\"web_notif_id\" referencedTableName=\"ntf_web_notifs\"\/>\r\n   <\/changeSet>\r\n   <changeSet author=\"exo (generated)\" id=\"1522331789463-192\">\r\n       <dropForeignKeyConstraint baseTableName=\"ntf_web_notifs_params\" constraintName=\"FK_8q0py1eo4lgwqdx0n96tv3iww\"\/>\r\n       <addForeignKeyConstraint baseColumnNames=\"web_notif_id\" baseTableName=\"ntf_web_notifs_params\" constraintName=\"FK_8q0py1eo4lgwqdx0n96tv3iww\"referencedColumnNames=\"web_notif_id\" referencedTableName=\"ntf_web_notifs\"\/>\r\n   <\/changeSet>\r\n\r\n<\/databaseChangeLog><\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-f6d4b6d elementor-widget elementor-widget-heading\" data-id=\"f6d4b6d\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Master changelog generation\n<\/h3>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-c0e4ac5 elementor-widget elementor-widget-heading\" data-id=\"c0e4ac5\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-25828\" src=\"https:\/\/www-dev.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/pucejaune.jpg\" alt=\"\" width=\"7\" height=\"6\" \/> Use a standard entry point\n<\/h4>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-12c799f elementor-widget elementor-widget-text-editor\" data-id=\"12c799f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\t<p>When using <strong>Liquibase<\/strong> as part of a build automation scenario, I think it makes sense to create a single entry point for Liquibase to manage all generated <strong>changelog<\/strong> files that we will call <strong>XYZ.db.changelog-master.xml<\/strong>. The aim is to start from this file and load all other changesets available in <strong>src\/main\/resources\/db\/changelog<\/strong>.<\/p>\n&nbsp;\n<p>The following snippet illustrates how we use a master <strong>changelog<\/strong> file within our add-on:<p>\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-d0df585 elementor-widget elementor-widget-code-highlight\" data-id=\"d0df585\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp><?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<databaseChangeLog xmlns=\"http:\/\/www.liquibase.org\/xml\/ns\/dbchangelog\"\r\n                  xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\r\n                  xsi:schemaLocation=\"http:\/\/www.liquibase.org\/xml\/ns\/dbchangelog\r\n                      http:\/\/www.liquibase.org\/xml\/ns\/dbchangelog\/dbchangelog-3.3.xsd\">\r\n   <includeAll path=\"src\/main\/resources\/db\/changelog\" \/>\r\n<\/databaseChangeLog><\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-d66c16e elementor-widget elementor-widget-text-editor\" data-id=\"d66c16e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tThus, each time a developer generates a new <strong>changelog<\/strong> using liquibase-maven-plugin, the change will be included seamlessly on server startup.\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-29bed13 elementor-widget elementor-widget-heading\" data-id=\"29bed13\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-25828\" src=\"https:\/\/www-dev.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/pucejaune.jpg\" alt=\"\" width=\"7\" height=\"6\" \/> Maven dependency\n<\/h4>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-3d34ede elementor-widget elementor-widget-text-editor\" data-id=\"3d34ede\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tThe Maven dependencies we need to add into our pom.xml:\n\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-6f1150b elementor-widget elementor-widget-code-highlight\" data-id=\"6f1150b\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp><dependency>\r\n\r\n<groupId>org.javassist<\/groupId>\r\n\r\n<artifactId>javassist<\/artifactId>\r\n\r\n<version>${org.javassist.version}<\/version>\r\n\r\n<\/dependency>\r\n\r\n<dependency>\r\n\r\n<groupId>org.liquibase<\/groupId>\r\n\r\n<artifactId>liquibase-core<\/artifactId>\r\n\r\n<version>${org.liquibase.version}<\/version>\r\n\r\n<\/dependency>\r\n\r\n<dependency>\r\n\r\n<groupId>org.liquibase.ext<\/groupId>\r\n\r\n<artifactId>liquibase-hibernate4<\/artifactId>\r\n\r\n<version>${org.liquibase-hibernate4.version}<\/version>\r\n\r\n<\/dependency>\r\n\r\n<dependency>\r\n\r\n<groupId>javax.validation<\/groupId>\r\n\r\n<artifactId>validation-api<\/artifactId>\r\n\r\n<version>${validation-api.version}<\/version>\r\n\r\n<\/dependency>\r\n\r\n<dependency>\r\n\r\n<groupId>mysql<\/groupId>\r\n\r\n<artifactId>mysql-connector-java<\/artifactId>\r\n\r\n<!-- Replace with the version of the MySQL driver you want to use -->\r\n\r\n<version>${mysql.version}<\/version>\r\n\r\n<\/dependency><\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-2bf9f9c elementor-widget elementor-widget-heading\" data-id=\"2bf9f9c\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-25828\" src=\"https:\/\/www-dev.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/pucejaune.jpg\" alt=\"\" width=\"7\" height=\"6\" \/> Create a specific Maven profile\n<\/h4>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-04899a2 elementor-widget elementor-widget-text-editor\" data-id=\"04899a2\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tUsing Maven profile we can further simplify the management of the database for developers. Below is a snippet of a <strong>Liquibase<\/strong> profile we use within our add-on.\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-fa7b014 elementor-widget elementor-widget-code-highlight\" data-id=\"fa7b014\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp><profile>\r\n           <id>liquibase<\/id>\r\n           <build>\r\n               <plugins>\r\n                   <plugin>\r\n                       <groupId>org.liquibase<\/groupId>\r\n                       <artifactId>liquibase-maven-plugin<\/artifactId>\r\n                       <version>${org.liquibase.version}<\/version>\r\n                       <configuration>\r\n                           <changeLogFile>services\/src\/main\/resources\/db\/changelog\/myaddon.db.changelog-master.xml<\/changeLogFile>\r\n                           <diffChangeLogFile>services\/src\/main\/resources\/db\/changelog\/myaddon.db.changelog-${maven.build.timestamp}.xml<\/diffChangeLogFile>\r\n                           <outputChangeLogFile>services\/src\/main\/resources\/db\/changelog\/myaddon.db.changelog.xml<\/outputChangeLogFile>\r\n                           <driver>com.mysql.jdbc.Driver<\/driver>\r\n                           <url>jdbc:mysql:\/\/${db.host}:${db.port}\/${db.schema}<\/url>\r\n                           <defaultSchemaName>tribe<\/defaultSchemaName>\r\n                           <username>${db.username}<\/username>\r\n                           <password>${db.password}<\/password>\r\n                           <referenceUrl>hibernate:ejb3:exo-pu?hibernate.ejb.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy<\/referenceUrl>\r\n                           <verbose>true<\/verbose>\r\n                           <logging>debug<\/logging>\r\n                       <\/configuration>\r\n                       <dependencies>\r\n                           <dependency>\r\n                               <groupId>org.javassist<\/groupId>\r\n                               <artifactId>javassist<\/artifactId>\r\n                               <version>${org.javassist.version}<\/version>\r\n                           <\/dependency>\r\n                           <dependency>\r\n                               <groupId>org.liquibase<\/groupId>\r\n                               <artifactId>liquibase-core<\/artifactId>\r\n                               <version>${org.liquibase.version}<\/version>\r\n                           <\/dependency>\r\n                           <dependency>\r\n                               <groupId>org.liquibase.ext<\/groupId>\r\n                               <artifactId>liquibase-hibernate4<\/artifactId>\r\n                               <version>${org.liquibase-hibernate4.version}<\/version>\r\n                           <\/dependency>\r\n                           <dependency>\r\n                               <groupId>javax.validation<\/groupId>\r\n                               <artifactId>validation-api<\/artifactId>\r\n                               <version>${validation-api.version}<\/version>\r\n                           <\/dependency>\r\n                           <dependency>\r\n                               <groupId>mysql<\/groupId>\r\n                               <artifactId>mysql-connector-java<\/artifactId>\r\n                               <!-- Replace with the version of the MySQL driver you want to use -->\r\n                               <version>${mysql.version}<\/version>\r\n                           <\/dependency>\r\n                           <dependency>\r\n                               <groupId>org.exoplatform.commons<\/groupId>\r\n                               <artifactId>commons-component-common<\/artifactId>\r\n                               <version>${org.exoplatform.platform.version}<\/version>\r\n                           <\/dependency>\r\n                           <dependency>\r\n                               <groupId>xml-apis<\/groupId>\r\n                               <artifactId>xml-apis<\/artifactId>\r\n                               <version>${xml-apis.version}<\/version>\r\n                           <\/dependency>\r\n                       <\/dependencies>\r\n                   <\/plugin>\r\n               <\/plugins>\r\n           <\/build>\r\n           <properties>\r\n               <profile.liquibase>liquibase<\/profile.liquibase>\r\n               <db.host>localhost<\/db.host>\r\n               <db.port>3306<\/db.port>\r\n               <db.schema>tribe<\/db.schema>\r\n               <db.username>root<\/db.username>\r\n               <db.password><\/db.password>\r\n           <\/properties>\r\n       <\/profile><\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-132c7d9 elementor-widget elementor-widget-text-editor\" data-id=\"132c7d9\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\t<p>To check that it works, run :<\/p>\n&nbsp;\n<p>mvn liquibase:help<\/p>\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-8bda674 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"8bda674\" data-element_type=\"section\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-78a8665 suppblock\" data-id=\"78a8665\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-34d39b8 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"34d39b8\" data-element_type=\"section\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-6e4b2a4\" data-id=\"6e4b2a4\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap\">\r\n\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/section>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-650f4c7\" data-id=\"650f4c7\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-a9960b4 elementor-hidden-tablet elementor-hidden-mobile elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"a9960b4\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-4a130f0\" data-id=\"4a130f0\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-84ba74c elementor-widget elementor-widget-image\" data-id=\"84ba74c\" data-element_type=\"widget\" data-widget_type=\"image.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"156\" height=\"218\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/Types-of-Digital-Workplace-Solutions.png\" class=\"attachment-large size-large wp-image-40318\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/Types-of-Digital-Workplace-Solutions.png 156w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/Types-of-Digital-Workplace-Solutions-94x131.png 94w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/Types-of-Digital-Workplace-Solutions-64x90.png 64w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/Types-of-Digital-Workplace-Solutions-21x30.png 21w\" sizes=\"(max-width: 156px) 100vw, 156px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-83b5d09 buttonright\" data-id=\"83b5d09\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2533ac4 elementor-widget elementor-widget-image\" data-id=\"2533ac4\" data-element_type=\"widget\" data-widget_type=\"image.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"207\" height=\"34\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/white-1.jpg\" class=\"attachment-large size-large wp-image-38144\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/white-1.jpg 207w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/white-1-200x33.jpg 200w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/white-1-100x16.jpg 100w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/white-1-70x11.jpg 70w\" sizes=\"(max-width: 207px) 100vw, 207px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-e660388 elementor-widget elementor-widget-heading\" data-id=\"e660388\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">FREE WHITE PAPER<\/h6>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-0a1c3b9 elementor-widget elementor-widget-text-editor\" data-id=\"0a1c3b9\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tDigitization of\nHuman Resources\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-d628207 buttonright\" data-id=\"d628207\" data-element_type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-c141983 elementor-widget elementor-widget-text-editor\" data-id=\"c141983\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tDigitization of Human Resources is a hot topic these days. What do companies expect out of it? \t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-7ce94ad elementor-align-center elementor-widget elementor-widget-button\" data-id=\"7ce94ad\" data-element_type=\"widget\" data-widget_type=\"button.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"elementor-button-wrapper\">\r\n\t\t\t<a href=\"https:\/\/www.exoplatform.com\/digitization-of-human-resources-challenges-opportunities-white-paper\/?utm_source=BlogEn&#038;utm_medium=Blog&#038;utm_campaign=Content&#038;utm_content=cta\" class=\"elementor-button-link elementor-button elementor-size-md\" role=\"button\">\r\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\r\n\t\t\t\t\t\t<span class=\"elementor-button-text\">Download Now<\/span>\r\n\t\t<\/span>\r\n\t\t\t\t\t<\/a>\r\n\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/section>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-e60e798 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"e60e798\" data-element_type=\"section\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-a225673\" data-id=\"a225673\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap\">\r\n\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-column elementor-col-66 elementor-top-column elementor-element elementor-element-2b6e5cd\" data-id=\"2b6e5cd\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b6d45a7 myheader1 elementor-widget elementor-widget-heading\" data-id=\"b6d45a7\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Summary<\/h2>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-c6efcfe elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"c6efcfe\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"elementor-divider\">\r\n\t\t\t<span class=\"elementor-divider-separator\">\r\n\t\t\t\t\t\t<\/span>\r\n\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-9ddd9d5 elementor-widget elementor-widget-text-editor\" data-id=\"9ddd9d5\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\t<p>To summarise what a developer needs to know in order to better use <strong>liquibase-maven-plugin<\/strong> through the interaction with a database (during dev lifecycle):<\/p>\n&nbsp;\n<ol style=\"list-style: dis; margin-left: 20px!important;\">\n \t<li style=\"font-weight: 400;\">Starting from an existing database, run the following CLI: <strong>mvn liquibase:generateChangeLog -Pliquibase<\/strong><\/li>\n \t<li style=\"font-weight: 400;\">Generate a <strong>changelog<\/strong> diff file between 2 DB (dev and prod): <strong>mvn liquibase:diff -Pliquibase<\/strong><\/li>\n \t<li style=\"font-weight: 400;\">Generate a changelog diff file between your prod\/dev environment and your JPA entities: <strong>mvn liquibase:diff -Pliquibase<\/strong><\/li>\n<\/ol>\n&nbsp;\n<p><strong>Note<\/strong>: As you may have noticed, we haven&#8217;t talked about <strong>liquibase:update<\/strong> option. Quite simply, this option is used to perform the schema changes listed in the changelog on the target database. For <strong>eXo projects<\/strong>, this use case was wrapped up within a core service called <strong>org.exoplatform.commons.persistence.impl.LiquibaseDataInitializer<\/strong> which is triggered at server startup.<\/p>\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-bf1c9af elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"bf1c9af\" data-element_type=\"section\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-ffc4a6e\" data-id=\"ffc4a6e\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap\">\r\n\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-column elementor-col-66 elementor-top-column elementor-element elementor-element-a48fa7c\" data-id=\"a48fa7c\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-08d81ea myheader1 elementor-widget elementor-widget-heading\" data-id=\"08d81ea\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Conclusion\n<\/h2>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-16caef8 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"16caef8\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"elementor-divider\">\r\n\t\t\t<span class=\"elementor-divider-separator\">\r\n\t\t\t\t\t\t<\/span>\r\n\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-cb1b785 elementor-widget elementor-widget-text-editor\" data-id=\"cb1b785\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tLiquibase is a powerful tool to keep control of your database schema changes during your development lifecycle. Coupled with <strong>liquibase-maven-plugin<\/strong>, it offers a very useful way of generating changelog files seamlessly. Instead of writing the file manually, developers rely on this plugin to do the job, which is a huge time saver. The Liquibase Maven Plugin allows you to safely manage the database for your eXo add-ons, and with the help of a <a href=\"https:\/\/popsql.com\/product\/sql-editor\" target=\"_blank\" rel=\"noopener\"><u>SQL text editor<\/u><\/a>, you can easily make changes to your database schema.\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6e9c07b elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6e9c07b\" data-element_type=\"section\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-3fc7005\" data-id=\"3fc7005\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap\">\r\n\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-column elementor-col-66 elementor-top-column elementor-element elementor-element-ee4eb77\" data-id=\"ee4eb77\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fc2c9f myheader1 elementor-widget elementor-widget-heading\" data-id=\"2fc2c9f\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Resources\n<\/h2>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-5aefe41 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"5aefe41\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"elementor-divider\">\r\n\t\t\t<span class=\"elementor-divider-separator\">\r\n\t\t\t\t\t\t<\/span>\r\n\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-9b7fe45 elementor-widget elementor-widget-text-editor\" data-id=\"9b7fe45\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\t<ul style=\"list-style: disc; margin-left: 20px!important;\">\n \t<li style=\"font-weight: 400;\">Liquibase tips: <a style=\"color: #2f5e92; text-decoration: underline;\" href=\"http:\/\/tips.defun.work\/liquibase.html\" target=\"_blank\" rel=\"noopener\">http:\/\/tips.defun.work\/liquibase.html<\/a><\/li>\n \t<li style=\"font-weight: 400;\">Liquibase with Maven: <a style=\"color: #2f5e92; text-decoration: underline;\" href=\"http:\/\/www.yegor256.com\/2014\/07\/20\/liquibase-in-maven.html\" target=\"_blank\" rel=\"noopener\">http:\/\/www.yegor256.com\/2014\/07\/20\/liquibase-in-maven.html<\/a><\/li>\n<\/ul>\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-653ae2d dow2-cl elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"653ae2d\" data-element_type=\"section\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-7756243\" data-id=\"7756243\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap\">\r\n\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-column elementor-col-66 elementor-top-column elementor-element elementor-element-da34bb9\" data-id=\"da34bb9\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-0c5f5d4 elementor-cta--skin-cover elementor-cta--valign-middle elementor-widget elementor-widget-call-to-action\" data-id=\"0c5f5d4\" data-element_type=\"widget\" data-widget_type=\"call-to-action.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<link rel=\"stylesheet\" href=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/plugins\/elementor-pro\/assets\/css\/widget-call-to-action.min.css\">\t\t<div class=\"elementor-cta\">\n\t\t\t\t\t<div class=\"elementor-cta__bg-wrapper\">\n\t\t\t\t<div class=\"elementor-cta__bg elementor-bg\" style=\"background-image: url(https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2021\/06\/CTA-collaboraion-platform.png);\"><\/div>\n\t\t\t\t<div class=\"elementor-cta__bg-overlay\"><\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-cta__content\">\n\t\t\t\t\n\t\t\t\t<div class=\"elementor-cta__title elementor-cta__content-item elementor-content-item\">Digital Collaboration Software<\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-cta__description elementor-cta__content-item elementor-content-item\">\n\t\t\t\t\t\tHelp Your Teams Connect, Collaborate and <br>Get Things Done\n\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-cta__button-wrapper elementor-cta__content-item elementor-content-item \">\n\t\t\t\t\t<a class=\"elementor-cta__button elementor-button elementor-size-md\" href=\"https:\/\/www.exoplatform.com\/digital-collaboration-software\/?utm_source=BlogEn&#038;utm_medium=Blog&#038;utm_campaign=Under_Content&#038;utm_content=cta\">\n\t\t\t\t\t\tLearn More\t\t\t\t\t<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-85734ff elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"85734ff\" data-element_type=\"section\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-a28439a\" data-id=\"a28439a\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-e4cee58 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"e4cee58\" data-element_type=\"section\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-5357202\" data-id=\"5357202\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-88b2387 elementor-align-left tags_class_element elementor-widget elementor-widget-post-info\" data-id=\"88b2387\" data-element_type=\"widget\" data-widget_type=\"post-info.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<ul class=\"elementor-icon-list-items elementor-post-info\">\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item elementor-repeater-item-4f61546\" itemprop=\"about\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-tags\"><\/i>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text elementor-post-info__item elementor-post-info__item--type-terms\">\n\t\t\t\t\t\t\t<span class=\"elementor-post-info__item-prefix\">Tags:<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-post-info__terms-list\">\n\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/exo\/\" class=\"elementor-post-info__terms-list-item\">eXo<\/a>, <a href=\"https:\/\/www.exoplatform.com\/blog\/tutorial\/\" class=\"elementor-post-info__terms-list-item\">Tutorial<\/a>\t\t\t\t<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t<li class=\"elementor-icon-list-item elementor-repeater-item-105f90f\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text elementor-post-info__item elementor-post-info__item--type-custom\">\n\t\t\t\t\t\t\t\t\t\t&nbsp;\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t<\/ul>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-8f836aa\" data-id=\"8f836aa\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-322e1e6 elementor-widget elementor-widget-shortcode\" data-id=\"322e1e6\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"elementor-shortcode\">\n\n<div class=\"kk-star-ratings kksr-shortcode\"\n    data-payload='{&quot;id&quot;:&quot;37216&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;shortcode&quot;,&quot;align&quot;:&quot;&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;47&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;4.7&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;valign&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;5&quot;,&quot;greet&quot;:&quot;Rate this post&quot;,&quot;legend&quot;:&quot;4.7\\\/5 - (47 votes)&quot;,&quot;size&quot;:&quot;24&quot;,&quot;width&quot;:&quot;133.8&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} - ({count} {votes})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 133.8px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 19.2px;\">\n            4.7\/5 - (47 votes)    <\/div>\n    <\/div>\n<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/section>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9ef4c3e elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"9ef4c3e\" data-element_type=\"section\" id=\"end-tet\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-e94ef85\" data-id=\"e94ef85\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-db13bb5 elementor-widget__width-inherit elementor-widget elementor-widget-testimonial\" data-id=\"db13bb5\" data-element_type=\"widget\" data-widget_type=\"testimonial.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<style>\/*! elementor - v3.13.2 - 11-05-2023 *\/\r\n.elementor-testimonial-wrapper{overflow:hidden;text-align:center}.elementor-testimonial-wrapper .elementor-testimonial-content{font-size:1.3em;margin-bottom:20px}.elementor-testimonial-wrapper .elementor-testimonial-name{line-height:1.5;display:block}.elementor-testimonial-wrapper .elementor-testimonial-job{font-size:.85em;display:block}.elementor-testimonial-wrapper .elementor-testimonial-meta{width:100%;line-height:1}.elementor-testimonial-wrapper .elementor-testimonial-meta-inner{display:inline-block}.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-details,.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image{display:table-cell;vertical-align:middle}.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image img{width:60px;height:60px;border-radius:50%;-o-object-fit:cover;object-fit:cover;max-width:none}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-image{padding-right:15px}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-details{text-align:left}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-details,.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image{display:block}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image{margin-bottom:20px}<\/style>\t\t<div class=\"elementor-testimonial-wrapper\">\r\n\t\t\t\r\n\t\t\t\t\t\t<div class=\"elementor-testimonial-meta elementor-has-image elementor-testimonial-image-position-top\">\r\n\t\t\t\t<div class=\"elementor-testimonial-meta-inner\">\r\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-testimonial-image\">\r\n\t\t\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/author\/kmenzli\/\" target=\"_blank\"><img decoding=\"async\" src=\"https:\/\/secure.gravatar.com\/avatar\/79e43575e536fb13e6a1da22de2b9555?s=96&amp;d=mm&amp;r=g\" title=\"\" alt=\"\" loading=\"lazy\" \/><\/a>\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-testimonial-details\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-testimonial-name\" href=\"https:\/\/www.exoplatform.com\/blog\/author\/kmenzli\/\" target=\"_blank\">Khemais Menzli<\/a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-column elementor-col-66 elementor-top-column elementor-element elementor-element-5570b6c\" data-id=\"5570b6c\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2e3f674 elementor-widget elementor-widget-testimonial\" data-id=\"2e3f674\" data-element_type=\"widget\" data-widget_type=\"testimonial.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"elementor-testimonial-wrapper\">\r\n\t\t\t\t\t\t\t<div class=\"elementor-testimonial-content\">\n  <figcaption>\n  <\/figcaption>\n<\/div>\r\n\t\t\t\r\n\t\t\t\t\t\t<div class=\"elementor-testimonial-meta\">\r\n\t\t\t\t<div class=\"elementor-testimonial-meta-inner\">\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-testimonial-details\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-testimonial-job\">I am a technical lead at eXo. with over 12 year of experience in Web &amp; IT technologies. I'm here to help you develop your next idea using eXo stack.<\/div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-b797288 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"b797288\" data-element_type=\"section\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-063c1cd\" data-id=\"063c1cd\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-149ff94 faq-id elementor-widget elementor-widget-heading\" data-id=\"149ff94\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">Related posts<\/h6>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-c2763fa emp-cat elementor-widget elementor-widget-shortcode\" data-id=\"c2763fa\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"elementor-shortcode\">\n\t<div class=\"am_ajax_post_grid_wrap\"  style=\"background-color: transparent !important; \" data-pagination_type=\"load_more\" data-am_ajax_post_grid='{\"show_filter\":\"yes\",\"btn_all\":\"yes\",\"initial\":\"-1\",\"layout\":\"1\",\"post_type\":\"post\",\"posts_per_page\":\"3\",\"cat\":\"\",\"terms\":\"\",\"paginate\":\"no\",\"hide_empty\":\"true\",\"orderby\":\"date\",\"order\":\"ASC\",\"pagination_type\":\"load_more\",\"infinite_scroll\":\"\",\"animation\":\"\",\"grid_id\":\"\"}'>\r\n\r\n\t\t\t\t\t<div class=\"asr-filter-div\" data-layout=\"1\"><ul>\r\n\t\t\t\t\t\t\t\t\t<li \r\n\r\n\r\n\r\n \r\n   class=\"asr_texonomy active\" style=\"font-weight:bold;\"data_id=\"-1\" style=\"background-color: transparent !important;\">All<\/li>\r\n\t\t\t\t\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1302\">eXo<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"508\">eXo<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"642\">eXo<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1407\">Anerkennung der Mitarbeiter<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"454\">Digital workplace<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"500\">Digital workplace<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1337\">Arbeitsplatz<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"462\">Employee engagement<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"616\">Engagement collaborateur<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1465\">Branchentrends<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"486\">Open source<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"506\">Open source<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"620\">Avenir du travail<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1411\">Cartoon<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"504\">Future of work<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1137\">Actualit\u00e9s<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1366\">Change Management<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"460\">Internal communication<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"492\">Collaboration<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"458\">Collaboration<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1287\">Digital Workplace<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1323\">Digitale Transformation<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"496\">Exp\u00e9rience collaborateur<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"705\">News<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"452\">intranet<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1135\">intranet<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"494\">Communication interne<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1311\">Infografik<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"409\">workplace<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1294\">interne Kommunikation<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"456\">Knowledge management<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"618\">onboarding<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"512\">Employee experience<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"490\">Gestion des connaissances<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1281\">intranet<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"502\">Conduite de changement<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"514\">Employee productivity<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1329\">Kollaboration<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1451\">Leadership<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1187\">Leadership<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"614\">onboarding<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1183\">Cartoon<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"518\">Employee recognition<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1331\">Leitfaden<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1181\">Astuces et bonnes pratiques<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"516\">Change management<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1292\">Mitarbeiter engagement<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"813\">Cartoon<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"411\">Etudes de cas<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1339\">Mitarbeiter Erfahrung<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"622\">Digital transformation<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1175\">Guide<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1317\">Nachrichten<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"799\">Infographic<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1185\">Infographie<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1403\">Onboarding<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1300\">Open source<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"510\">Remote work<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"498\">Productivit\u00e9<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1173\">T\u00e9l\u00e9travail<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"488\">Transformation digitale<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1179\">Tutoriel<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1443\">Actualit\u00e9s produit<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1562\">Extranet<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1461\">Industry trends<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1445\">Product News<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1447\">Produkt Nachrichten<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1309\">Produktivit\u00e4t<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1405\">Reconnaissance des employ\u00e9s<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1307\">Telearbeit<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1463\">Tendances<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1449\">Thought leadership<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1345\">Tipps und Tricks<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"780\">Tips &amp; Tricks<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"819\">Tutorial<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1269\">Uncategorized<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"699\">Uncategorized<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1378\">Wissensmanagement<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1304\">Zukunft der Arbeit<\/li>\r\n\t\t        \t        <\/ul><\/div>\r\n\t    \r\n\t    <div class=\"asr-ajax-container\" style=\"background-color: transparent !important;\">\r\n\t\t    <div class=\"asr-loader\">\r\n\t\t    \t<div class=\"lds-dual-ring\"><\/div>\r\n\t\t    <\/div>\r\n\t\t    <div class=\"asrafp-filter-result\">\r\n\t\t    \t<div class=\"am-postgrid-wrapper\">\r\n\r\n\t\t<div class=\"am_post_grid am__col-3 am_layout_1  \">\r\n\t\t\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"am_grid_col\">\r\n\t\t\t\t<div class=\"am_single_grid\">\r\n\t\t\t\t\t<div class=\"am_thumb\">\r\n\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/exo-platform-ai-augmented-digital-workplace\/\">\r\n\t\t\t\t\t\t<img width=\"800\" height=\"533\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/Cover_blog_features_IA_EN-800x533-1-1.png\" class=\"attachment-full size-full wp-post-image\" alt=\"\" decoding=\"async\" loading=\"lazy\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/Cover_blog_features_IA_EN-800x533-1-1.png 800w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/Cover_blog_features_IA_EN-800x533-1-1-300x200.png 300w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/Cover_blog_features_IA_EN-800x533-1-1-768x512.png 768w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/Cover_blog_features_IA_EN-800x533-1-1-710x473.png 710w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/Cover_blog_features_IA_EN-800x533-1-1-492x328.png 492w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/Cover_blog_features_IA_EN-800x533-1-1-354x236.png 354w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/Cover_blog_features_IA_EN-800x533-1-1-197x131.png 197w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/Cover_blog_features_IA_EN-800x533-1-1-100x67.png 100w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/Cover_blog_features_IA_EN-800x533-1-1-45x30.png 45w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/Cover_blog_features_IA_EN-800x533-1-1-640x426.png 640w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t<\/a>\t\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t\t<div class=\"am_cont\">\r\n\t\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/exo-platform-ai-augmented-digital-workplace\/\"><h2 class=\"am__title\">eXo Platform launches an AI-augmented Digital Workplace<\/h2><\/a>\r\n\t\t\t\t\t\t<div class=\"am__excerpt\">\r\n\t\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/exo-platform-ai-augmented-digital-workplace\/\">Today, we are proud to introduce our new AI-augmented Digital Workplace.<\/a>\r\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/exo-platform-ai-augmented-digital-workplace\/\" class=\"am__readmore\">Read More<\/a>\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t\t<div class=\"post_tags\"><a href=\"https:\/\/www.exoplatform.com\/blog\/product-news\/\" title=\"Product News Tag\" class=\"product-news\">Product News<\/a> <\/div>\t\t\t\t\t<div class=\"am_time\">\r\n\t\t\t\t\t\t<span class=\"bsf-rt-reading-time\"><span class=\"bsf-rt-display-label\" prefix=\"Reading Time\">\n\t\t<\/span> <span class=\"bsf-rt-display-time\" reading_time=\"17\"><\/span> \n\t\t<span class=\"bsf-rt-display-postfix\" postfix=\"min\"><\/span><\/span> \r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t<\/div>\r\n\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"am_grid_col\">\r\n\t\t\t\t<div class=\"am_single_grid\">\r\n\t\t\t\t\t<div class=\"am_thumb\">\r\n\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/multi-llm-ai-digital-workplace-launch\/\">\r\n\t\t\t\t\t\t<img width=\"800\" height=\"533\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/exo-platform-AI-press-release.png\" class=\"attachment-full size-full wp-post-image\" alt=\"\" decoding=\"async\" loading=\"lazy\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/exo-platform-AI-press-release.png 800w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/exo-platform-AI-press-release-300x200.png 300w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/exo-platform-AI-press-release-768x512.png 768w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/exo-platform-AI-press-release-710x473.png 710w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/exo-platform-AI-press-release-492x328.png 492w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/exo-platform-AI-press-release-354x236.png 354w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/exo-platform-AI-press-release-197x131.png 197w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/exo-platform-AI-press-release-100x67.png 100w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/exo-platform-AI-press-release-45x30.png 45w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/exo-platform-AI-press-release-640x426.png 640w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t<\/a>\t\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t\t<div class=\"am_cont\">\r\n\t\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/multi-llm-ai-digital-workplace-launch\/\"><h2 class=\"am__title\">eXo Platform Introduces a Controlled, Multi-LLM AI Digital Workplace<\/h2><\/a>\r\n\t\t\t\t\t\t<div class=\"am__excerpt\">\r\n\t\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/multi-llm-ai-digital-workplace-launch\/\">Paris, March 31, 2026 \u2013 eXo Platform announces the launch of its\u2026<\/a>\r\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/multi-llm-ai-digital-workplace-launch\/\" class=\"am__readmore\">Read More<\/a>\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t\t<div class=\"post_tags\"><a href=\"https:\/\/www.exoplatform.com\/blog\/news\/\" title=\"News Tag\" class=\"news\">News<\/a> <\/div>\t\t\t\t\t<div class=\"am_time\">\r\n\t\t\t\t\t\t<span class=\"bsf-rt-reading-time\"><span class=\"bsf-rt-display-label\" prefix=\"Reading Time\">\n\t\t<\/span> <span class=\"bsf-rt-display-time\" reading_time=\"1\"><\/span> \n\t\t<span class=\"bsf-rt-display-postfix\" postfix=\"min\"><\/span><\/span> \r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t<\/div>\r\n\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"am_grid_col\">\r\n\t\t\t\t<div class=\"am_single_grid\">\r\n\t\t\t\t\t<div class=\"am_thumb\">\r\n\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/orange-business-sovereign-digital-workplace-by-exo-platform\/\">\r\n\t\t\t\t\t\t<img width=\"800\" height=\"533\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/800x533-Banner-Partenaires-Live-Collaboration-1.png\" class=\"attachment-full size-full wp-post-image\" alt=\"\" decoding=\"async\" loading=\"lazy\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/800x533-Banner-Partenaires-Live-Collaboration-1.png 800w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/800x533-Banner-Partenaires-Live-Collaboration-1-300x200.png 300w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/800x533-Banner-Partenaires-Live-Collaboration-1-768x512.png 768w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/800x533-Banner-Partenaires-Live-Collaboration-1-710x473.png 710w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/800x533-Banner-Partenaires-Live-Collaboration-1-492x328.png 492w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/800x533-Banner-Partenaires-Live-Collaboration-1-354x236.png 354w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/800x533-Banner-Partenaires-Live-Collaboration-1-197x131.png 197w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/800x533-Banner-Partenaires-Live-Collaboration-1-100x67.png 100w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/800x533-Banner-Partenaires-Live-Collaboration-1-45x30.png 45w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/800x533-Banner-Partenaires-Live-Collaboration-1-640x426.png 640w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t<\/a>\t\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t\t<div class=\"am_cont\">\r\n\t\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/orange-business-sovereign-digital-workplace-by-exo-platform\/\"><h2 class=\"am__title\">eXo Platform at the heart of the trusted collaboration suite launched by Orange Business<\/h2><\/a>\r\n\t\t\t\t\t\t<div class=\"am__excerpt\">\r\n\t\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/orange-business-sovereign-digital-workplace-by-exo-platform\/\">Faced with rising geopolitical tensions and a growing reliance on U.S.-based collaborative\u2026<\/a>\r\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/orange-business-sovereign-digital-workplace-by-exo-platform\/\" class=\"am__readmore\">Read More<\/a>\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t\t<div class=\"post_tags\"><a href=\"https:\/\/www.exoplatform.com\/blog\/news\/\" title=\"News Tag\" class=\"news\">News<\/a> <\/div>\t\t\t\t\t<div class=\"am_time\">\r\n\t\t\t\t\t\t<span class=\"bsf-rt-reading-time\"><span class=\"bsf-rt-display-label\" prefix=\"Reading Time\">\n\t\t<\/span> <span class=\"bsf-rt-display-time\" reading_time=\"4\"><\/span> \n\t\t<span class=\"bsf-rt-display-postfix\" postfix=\"min\"><\/span><\/span> \r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t<\/div>\r\n\t\t\t\r\n\t\t\t\t<\/div>\r\n\r\n\t\t<div class=\"am_posts_navigation\">\r\n\t\t<button type='button' data-paged='1' data-next='2' class=' am-post-grid-load-more '>Voir Plus<\/button>\t\t<\/div>\r\n\r\n\t\t<\/div>\t\t    <\/div>\r\n\t    <\/div>\r\n    <\/div>\r\n\r\n\t\n\n\n\n\t\t\t\n\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-4c97efa elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"4c97efa\" data-element_type=\"section\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-69de4af\" data-id=\"69de4af\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-560f76e elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"560f76e\" data-element_type=\"section\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-0e335c6\" data-id=\"0e335c6\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-8c99f5a elementor-widget elementor-widget-heading\" data-id=\"8c99f5a\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">Leave a Reply<\/h6>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-44aff58\" data-id=\"44aff58\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6cf13f4 elementor-widget elementor-widget-text-editor\" data-id=\"6cf13f4\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\t<p>( Your e-mail address will not be published)<\/p>\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-b5da433 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"b5da433\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"elementor-divider\">\r\n\t\t\t<span class=\"elementor-divider-separator\">\r\n\t\t\t\t\t\t<\/span>\r\n\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/section>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t","protected":false},"excerpt":{"rendered":"Safely manage the database for your eXo add-ons with Liquibase Maven Plugin A while ago, eXo introduced Liquibase to evolve the database schema safely in the product. A built-in component has been provided within the eXo commons project to let Liquibase perform database schema changes between versions of eXo Platform. However, it was designed to [&hellip;]","protected":false},"author":72,"featured_media":35627,"comment_status":"open","ping_status":"open","sticky":false,"template":"main1-article.php","format":"image","meta":[],"categories":[508,819],"tags":[606,536,528],"lang":"en","translations":{"en":37216},"pll_sync_post":[],"_links":{"self":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/posts\/37216"}],"collection":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/users\/72"}],"replies":[{"embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/comments?post=37216"}],"version-history":[{"count":0,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/posts\/37216\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/media\/35627"}],"wp:attachment":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/media?parent=37216"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/categories?post=37216"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/tags?post=37216"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}