<!--
Copyright 2011 Normation SAS

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.normation</groupId>
  <artifactId>parent-pom</artifactId>
  <version>9.1.0~beta1</version>
  <packaging>pom</packaging>

  <!-- ====================================  PROJECT INFORMATION  ==================================== -->

  <description>
    Rudder helps you continuously configure and check compliance of your infrastructure.
  </description>

  <organization>
    <name>rudder.io</name>
    <url>https://rudder.io</url>
  </organization>

  <scm>
    <url>https://github.com/Normation/rudder/</url>
  </scm>

  <!-- we can't put a licenses tag here, else for some reason it overrides utils one -->
  <modules>
    <module>utils</module>
    <module>scala-ldap</module>
    <module>ldap-inventory</module>
    <module>rudder</module>
 </modules>

  <!-- developpers information can be better found in Git commit history -->

  <!-- ====================================  /PROJECT INFORMATION  ==================================== -->

  <!-- ====================================  PROJECT REPOS  ==================================== -->

  <repositories>
    <repository>
      <id>maven_central</id>
      <name>Default maven repository</name>
      <url>https://repo1.maven.org/maven2/</url>
      <snapshots><enabled>true</enabled></snapshots>
    </repository>
    <repository>
      <id>rudder-release</id>
      <url>https://repository.rudder.io/maven/releases/</url>
      <layout>default</layout>
      <snapshots><enabled>false</enabled></snapshots>
    </repository>
    <repository>
      <id>rudder-snapshot</id>
      <url>https://repository.rudder.io/maven/snapshots/</url>
      <layout>default</layout>
      <snapshots><enabled>true</enabled></snapshots>
    </repository>
  </repositories>

  <!-- ====================================  /PROJECT REPOS  ==================================== -->

  <!-- ====================================  PROJECT BUILD  ==================================== -->

  <distributionManagement>
    <snapshotRepository>
      <id>snapshots.nexus.normation.com</id>
      <name>Normation internal nexus repository for snapshots</name>
      <url>https://nexus.normation.com/nexus/content/repositories/snapshots</url>
    </snapshotRepository>
    <repository>
      <id>releases.nexus.normation.com</id>
      <name>Normation internal nexus repository for release</name>
      <url>https://nexus.normation.com/nexus/content/repositories/releases</url>
    </repository>
  </distributionManagement>

  <reporting>
    <plugins>
      <plugin>
        <groupId>net.alchim31.maven</groupId>
        <artifactId>scala-maven-plugin</artifactId>
        <version>${scala-maven-plugin-version}</version>
      </plugin>
    </plugins>
  </reporting>

  <build>
    <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-ssh</artifactId>
        <version>3.5.3</version>
      </extension>
    </extensions>
    <plugins>
      <plugin>
        <groupId>io.github.evis</groupId>
        <artifactId>scalafix-maven-plugin_2.13</artifactId>
        <version>0.1.10_0.14.2</version>
      </plugin>
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>3.4.0</version>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <version>2.7</version>
        <configuration>
          <formats>
            <format>html</format>
            <format>xml</format>
          </formats>
          <check/>
        </configuration>
      </plugin>
       <plugin>
        <groupId>net.alchim31.maven</groupId>
        <artifactId>scala-maven-plugin</artifactId>
        <version>${scala-maven-plugin-version}</version>
        <executions>
          <execution>
            <id>scala-compile-first</id>
            <phase>compile</phase>
            <goals>
              <goal>add-source</goal>
              <goal>compile</goal>
            </goals>
          </execution>
          <execution>
            <id>scala-test-compile</id>
            <phase>test-compile</phase>
            <goals>
              <goal>testCompile</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <scalaCompatVersion>${scala-binary-version}</scalaCompatVersion>
          <scalaVersion>${scala-version}</scalaVersion>
          <recompileMode>all</recompileMode>
          <args>
            <arg>-release:17</arg>
            <arg>-deprecation</arg>                  <!-- Emit warning and location for usages of deprecated APIs. -->
            <arg>-explain-types</arg>                 <!-- Explain type errors in more detail. -->
            <arg>-feature</arg>                      <!-- Emit warning and location for usages of features that should be imported explicitly. -->
            <arg>-unchecked</arg>                    <!-- Enable additional warnings where generated code depends on assumptions. -->
            <arg>-language:existentials</arg>        <!-- Existential types (besides wildcard types) can be written and inferred -->
            <arg>-language:higherKinds</arg>         <!-- Allow higher-kinded types -->
            <arg>-language:implicitConversions</arg> <!-- Allow definition of implicit functions called views -->
            <arg>-Xmax-inlines</arg><arg>100</arg>
            <!-- Ignore warning for BoxTrait existential type, no way to change that -->
            <arg>-Wconf:msg=An existential type that came from a Scala-2 classfile for trait BoxTrait:s</arg>
            <!--<arg>-Wsafe-init</arg> -->      <!--  Wrap field accessors to throw an exception on uninitialized access. Disabled because of technique repo and API -->
            <arg>-Xfatal-warnings</arg>         <!-- Fail the compilation if there are any warnings. -->
            <arg>-Wunused:imports</arg>         <!-- Warn if an import selector is not referenced. -->
            <arg>-Wunused:locals</arg>          <!-- Warn if a local definition is unused. -->
            <arg>-Wunused:implicits</arg>       <!-- Warn if an implicit parameter is unused. -->
            <arg>-Wunused:privates</arg>        <!-- Warn if a private member is unused. -->
            <arg>-Ysemanticdb</arg>
          </args>
          <jvmArgs>
            <jvmArg>-Xmx${jvmArg-Xmx}</jvmArg>
            <jvmArg>-Xms${jvmArg-Xmx}</jvmArg>
            <jvmArg>-Xss${jvmArg-Xss}</jvmArg>
            <jvmArg>${jvmArg-arg0}</jvmArg>
            <jvmArg>${jvmArg-arg1}</jvmArg>
            <jvmArg>${jvmArg-arg2}</jvmArg>
            <jvmArg>${jvmArg-arg3}</jvmArg>
            <jvmArg>${jvmArg-arg4}</jvmArg>
            <jvmArg>${jvmArg-arg5}</jvmArg>
            <jvmArg>${jvmArg-arg6}</jvmArg>
            <jvmArg>${jvmArg-arg7}</jvmArg>
            <jvmArg>${jvmArg-arg8}</jvmArg>
            <jvmArg>${jvmArg-arg9}</jvmArg>
          </jvmArgs>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.15.0</version>
        <configuration>
          <release>17</release>
        </configuration>
        <executions>
          <execution>
            <phase>compile</phase>
            <goals>
              <goal>compile</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>3.4.0</version>
        <executions>
          <execution>
            <id>attach-sources</id>
            <phase>verify</phase>
            <goals>
              <goal>jar-no-fork</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <!-- formatting with scalafmt -->
      <plugin>
        <groupId>com.diffplug.spotless</groupId>
        <artifactId>spotless-maven-plugin</artifactId>
        <version>3.2.1</version>
        <configuration>
          <scala>
            <includes>
              <include>src/**/*.scala</include>
            </includes>
            <excludes>
              <exclude>**/ConstraintsTest.scala</exclude> <!-- make spotless scalafmt stack overflow, works on intellij: ignore -->
            </excludes>

            <scalafmt>
              <version>3.7.17</version>
              <file>.scalafmt.conf</file>
            </scalafmt>

<!--            <licenseHeader>-->
<!--              <content>/* (C)$YEAR */</content>  &lt;!&ndash; or <file>${project.basedir}/license-header</file> &ndash;&gt;-->
<!--              <delimiter>package </delimiter> &lt;!&ndash;-->
<!--                note the 'package ' argument - this is a regex which identifies the top-->
<!--                of the file, be careful that all of your sources have a package declaration,-->
<!--                or pick a regex which works better for your code &ndash;&gt;-->
<!--            </licenseHeader>-->
          </scala>
        </configuration>
        <executions>
          <execution>
            <goals>
              <goal>check</goal>
            </goals>
            <phase>validate</phase>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>3.5.4</version>
        <configuration>
          <argLine>-Dspecs2.commandline=console</argLine>
        </configuration>
      </plugin>
    </plugins>
    <pluginManagement>
    <plugins>
      <!-- configure jar everywhere -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.3.0</version> <!-- 3.4.x does not work -->
        <configuration>
          <archive>
            <addMavenDescriptor>false</addMavenDescriptor>
            <manifestEntries>
              <!-- let built-by be empty - we can't remove it -->
              <Built-By>${project.organization.name}</Built-By>
              <Build-Time>${maven.build.timestamp}</Build-Time>
              <version>${project.version}</version>
            </manifestEntries>
          </archive>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
          <archive>
            <addMavenDescriptor>false</addMavenDescriptor>
            <manifestEntries>
              <!-- let built-by be empty - we can't remove it -->
              <Built-By>${project.organization.name}</Built-By>
              <!-- And yes, manifest file must start with upper case... -->
              <Build-Time>${maven.build.timestamp}</Build-Time>
              <Version>${project.version}</Version>
            </manifestEntries>
          </archive>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.eclipse.m2e</groupId>
        <artifactId>lifecycle-mapping</artifactId>
        <version>1.0.0</version>
        <configuration>
          <lifecycleMappingMetadata>
            <pluginExecutions>
              <pluginExecution>
                <pluginExecutionFilter>
                  <groupId>org.zeroturnaround</groupId>
                  <artifactId>jrebel-maven-plugin</artifactId>
                  <versionRange>[0.1,)</versionRange>
                  <goals>
                    <goal>generate</goal>
                  </goals>
                </pluginExecutionFilter>
                <action>
                  <execute/>
                </action>
              </pluginExecution>
              <pluginExecution>
                <pluginExecutionFilter>
                  <groupId>net.alchim31.maven</groupId>
                  <artifactId>scala-maven-plugin</artifactId>
                  <versionRange>[0.1,)</versionRange>
                  <goals>
                    <goal>add-source</goal>
                    <goal>compile</goal>
                    <goal>testCompile</goal>
                  </goals>
                </pluginExecutionFilter>
                <action>
                  <configurator>
                    <id>org.maven.ide.eclipse.scala</id>
                  </configurator>
                </action>
              </pluginExecution>
            </pluginExecutions>
          </lifecycleMappingMetadata>
        </configuration>
      </plugin>
    </plugins>
    </pluginManagement>
  </build>

  <!-- ====================================  /PROJECT BUILD  ==================================== -->

  <!-- ==================================== PROJECT PROPERTIES  ==================================== -->

  <properties>
    <!-- we use UTF-8 for everything -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <!-- Maven plugin version -->
    <scala-maven-plugin-version>4.9.8</scala-maven-plugin-version>

    <!-- Libraries version that MUST be used in all children project -->

    <current-year>2026</current-year>
    <rudder-major-version>9.1</rudder-major-version>
    <rudder-version>9.1.0~beta1</rudder-version>

    <servlet-version>5.0.0</servlet-version>
    <scala-version>3.7.3</scala-version>
    <scala2-version>2.13.18</scala2-version>
    <scala-binary-version>3</scala-binary-version>
    <scala-xml-version>1.3.1</scala-xml-version>
    <lift-version>4.0.0-M2</lift-version>
    <slf4j-version>2.0.17</slf4j-version>
    <logback-version>1.5.27</logback-version>
    <janino-version>3.1.12</janino-version>
    <jodatime-version>2.14.0</jodatime-version>
    <jodaconvert-version>3.0.1</jodaconvert-version>
    <commons-io-version>2.21.0</commons-io-version>
    <commons-lang-version>3.20.0</commons-lang-version>
    <commons-text-version>1.15.0</commons-text-version>
    <commons-codec-version>1.21.0</commons-codec-version>
    <commons-fileupload>2.0.0-M4</commons-fileupload>
    <commons-csv-version>1.14.1</commons-csv-version>
    <jgit-version>7.5.0.202512021534-r</jgit-version>
    <spring-version>6.1.21</spring-version>
    <spring-security-version>6.3.10</spring-security-version>
    <cglib-version>3.3.0</cglib-version>
    <asm-version>9.9.1</asm-version>
    <!-- Level of Java compatibility, here 1.8+ -->
    <bouncycastle-compat>jdk18on</bouncycastle-compat>
    <bouncycastle-version>1.83</bouncycastle-version>
    <better-files-version>3.9.2</better-files-version>
    <sourcecode-version>0.4.4</sourcecode-version>
    <quicklens-version>1.9.12</quicklens-version>
    <hikaricp-version>7.0.2</hikaricp-version>
    <nuprocess-version>3.0.0</nuprocess-version>
    <postgresql-version>42.7.9</postgresql-version>
    <json-path-version>2.10.0</json-path-version>
    <json-smart-version>2.6.0</json-smart-version>
    <scalaj-version>2.4.2</scalaj-version>
    <unboundid-version>7.0.4</unboundid-version>
    <fastparse-version>3.1.1</fastparse-version>
    <config-version>1.4.5</config-version>
    <caffeine-version>3.2.3</caffeine-version>
    <jgrapht-version>1.5.2</jgrapht-version>
    <reflections-version>0.10.2</reflections-version>
    <graalvm-version>25.0.2</graalvm-version>
    <chimney-version>1.8.2</chimney-version>
    <chimney-macro-version>2.0.2</chimney-macro-version>
    <cron4s-version>0.8.2</cron4s-version>
    <ipaddress-version>5.6.1</ipaddress-version>
    <snakeyaml-version>2.5</snakeyaml-version>

    <zio-http-version>2.0.0-RC11</zio-http-version> <!-- used in datasources -->

    <!--
      These one must be updated to work together
      We declare cats in "test" here, because it is not directly needed
      in any project before rudder.
    -->
    <specs2-version>4.23.0</specs2-version>
    <junit-version>4.13.2</junit-version>
    <cats-version>2.13.0</cats-version>
    <ip4s-version>3.7.0</ip4s-version>
    <doobie-version>1.0.0-RC11</doobie-version>
    <cats-effect-version>3.6.1</cats-effect-version>
    <dev-zio-version>2.1.24</dev-zio-version>
    <zio-cats-version>23.1.0.13</zio-cats-version> <!-- gives fs2 3.10.2, but doobie 1.0.0-RC5 is in 3.9.3 -->
    <zio-json-version>0.8.0</zio-json-version>
    <izumi-version>3.0.9</izumi-version>
    <magnolia-version>1.3.18</magnolia-version>
    <difflicious-version>0.4.4</difflicious-version>
    <enumeratum-version>1.9.4</enumeratum-version>

    <!--
      Hack to make scalac jvm parameters like RAM configurable.
      With that, one can override Xmx or add jvm parameters either
      in command line invocation: mvn compile -DjvmArg-Xmx="4G"
      or in ~/.m2/settings.xml with profiles.
    -->

    <jvmArg-Xmx>2G</jvmArg-Xmx>
    <jvmArg-Xss>64m</jvmArg-Xss>
    <jvmArg-arg0/>
    <jvmArg-arg1/>
    <jvmArg-arg2/>
    <jvmArg-arg3/>
    <jvmArg-arg4/>
    <jvmArg-arg5/>
    <jvmArg-arg6/>
    <jvmArg-arg7/>
    <jvmArg-arg8/>
    <jvmArg-arg9/>

  </properties>

  <!-- ==================================== PROJECT DEPENDENCIES  ==================================== -->

  <!--
    This allows to use homogeneous version of scalaz everywhere.
    Yep, we need to explicitly specify them all.
  -->
  <dependencyManagement>
    <dependencies>
      <!--
        We need to enforce version of all components of scala, else maven takes the oldest from transitive dep.
        It seems to be because scala has them "compatible"
       -->
      <dependency>
        <groupId>jakarta.servlet</groupId>
        <artifactId>jakarta.servlet-api</artifactId>
        <version>${servlet-version}</version>
        <scope>provided</scope>
      </dependency>
      <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>${scala2-version}</version>
      </dependency>
      <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala3-library_${scala-binary-version}</artifactId>
        <version>${scala-version}</version>
      </dependency>
      <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-compiler_${scala-binary-version}</artifactId>
        <version>${scala-version}</version>
      </dependency>
      <dependency>
        <groupId>org.scala-lang.modules</groupId>
        <artifactId>scala-parser-combinators_3</artifactId>
        <version>2.4.0</version>
      </dependency>
      <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-reflect_${scala-binary-version}</artifactId>
        <version>${scala-version}</version>
      </dependency>
      <dependency>
        <groupId>org.scala-lang.modules</groupId>
        <artifactId>scala-xml_2.13</artifactId>
        <version>${scala-xml-version}</version>
      </dependency>
      <dependency>
        <groupId>org.typelevel</groupId>
        <artifactId>cats-core_${scala-binary-version}</artifactId>
        <version>${cats-version}</version>
      </dependency>
      <dependency>
        <groupId>com.comcast</groupId>
        <artifactId>ip4s-core_${scala-binary-version}</artifactId>
        <version>${ip4s-version}</version>
      </dependency>
      <dependency>
        <groupId>org.tpolecat</groupId>
        <artifactId>doobie-core_${scala-binary-version}</artifactId>
        <version>${doobie-version}</version>
      </dependency>
      <!-- this is needed for doobie/cats/zio compat in scala 3 -->
      <dependency>
        <groupId>org.typelevel</groupId>
        <artifactId>cats-effect-std_${scala-binary-version}</artifactId>
        <version>${cats-effect-version}</version>
      </dependency>
      <dependency>
        <groupId>com.lihaoyi</groupId>
        <artifactId>sourcecode_${scala-binary-version}</artifactId>
        <version>${sourcecode-version}</version>
      </dependency>
      <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
        <version>${hikaricp-version}</version>
      </dependency>
      <dependency>
        <groupId>org.postgresql</groupId>
	      <artifactId>postgresql</artifactId>
        <version>${postgresql-version}</version>
      </dependency>
      <dependency>
        <groupId>com.softwaremill.quicklens</groupId>
        <artifactId>quicklens_${scala-binary-version}</artifactId>
        <version>${quicklens-version}</version>
      </dependency><!--
        lift-web
      -->
      <dependency>
        <groupId>xerces</groupId>
        <artifactId>xercesImpl</artifactId>
        <version>2.12.2</version>
      </dependency>
      <dependency>
        <groupId>net.liftweb</groupId>
        <artifactId>lift-common_2.13</artifactId>
        <version>${lift-version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
          </exclusion>
          <exclusion>
            <artifactId>log4j</artifactId>
            <groupId>log4j</groupId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>net.liftweb</groupId>
        <artifactId>lift-json_2.13</artifactId>
        <version>${lift-version}</version>
      </dependency>
      <dependency>
        <groupId>net.liftweb</groupId>
        <artifactId>lift-util_2.13</artifactId>
        <version>${lift-version}</version>
        <exclusions>
          <exclusion>
            <artifactId>mail</artifactId>
            <groupId>javax.mail</groupId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>net.liftweb</groupId>
        <artifactId>lift-webkit_2.13</artifactId>
        <version>${lift-version}</version>
        <exclusions>
          <exclusion>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <!-- joda time -->
      <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>${jodatime-version}</version>
      </dependency>
      <dependency>
        <groupId>org.joda</groupId>
        <artifactId>joda-convert</artifactId>
        <version>${jodaconvert-version}</version>
      </dependency>
      <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-${bouncycastle-compat}</artifactId>
        <version>${bouncycastle-version}</version>
      </dependency>
      <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcpkix-${bouncycastle-compat}</artifactId>
        <version>${bouncycastle-version}</version>
      </dependency>
      <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcpg-${bouncycastle-compat}</artifactId>
        <version>${bouncycastle-version}</version>
      </dependency>
      <dependency>
        <groupId>com.github.alonsodomin.cron4s</groupId>
        <artifactId>cron4s-core_${scala-binary-version}</artifactId>
        <version>${cron4s-version}</version>
      </dependency>

      <dependency>
        <groupId>com.lihaoyi</groupId>
        <artifactId>fastparse_${scala-binary-version}</artifactId>
        <version>${fastparse-version}</version>
      </dependency>

      <!-- commons -->
      <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>${commons-io-version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>${commons-lang-version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-text</artifactId>
        <version>${commons-text-version}</version>
      </dependency>
      <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>${commons-codec-version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-csv</artifactId>
        <version>${commons-csv-version}</version>
      </dependency>
      <!-- spring -->
      <dependency>
        <groupId>org.ow2.asm</groupId>
        <artifactId>asm</artifactId>
        <version>${asm-version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring-version}</version>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring-version}</version>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <!-- need to be specified else spring-security version is used -->
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>${spring-version}</version>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${spring-version}</version>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-expression</artifactId>
        <version>${spring-version}</version>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <!-- Needed to use spring configuration by annotation -->
      <dependency>
        <groupId>cglib</groupId>
        <artifactId>cglib</artifactId>
        <version>${cglib-version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

      <!--  test -->
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit-version}</version>
      </dependency>
      <dependency>
        <groupId>org.specs2</groupId>
        <artifactId>specs2-core_${scala-binary-version}</artifactId>
        <version>${specs2-version}</version>
      </dependency>
      <dependency>
        <groupId>org.specs2</groupId>
        <artifactId>specs2-matcher-extra_${scala-binary-version}</artifactId>
        <version>${specs2-version}</version>
      </dependency>
      <dependency>
        <groupId>org.specs2</groupId>
        <artifactId>specs2-junit_${scala-binary-version}</artifactId>
        <version>${specs2-version}</version>
      </dependency>
      <dependency>
        <groupId>org.tpolecat</groupId>
        <artifactId>doobie-specs2_${scala-binary-version}</artifactId>
        <version>${doobie-version}</version>
      </dependency>
      <!-- No httpclient / commons-logging for jgit -->
      <dependency>
        <groupId>org.eclipse.jgit</groupId>
        <artifactId>org.eclipse.jgit</artifactId>
        <version>${jgit-version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <!-- the slf4j commons-logging replacement -->
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j-version}</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>${slf4j-version}</version>
      </dependency>
      <!-- using slf4j native backend -->
      <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>${logback-version}</version>
      </dependency>
      <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>${logback-version}</version>
      </dependency>
      <dependency>
        <groupId>org.codehaus.janino</groupId>
        <artifactId>janino</artifactId>
        <version>${janino-version}</version>
      </dependency>
      <dependency>
        <groupId>com.github.pathikrit</groupId>
        <artifactId>better-files_${scala-binary-version}</artifactId>
        <version>${better-files-version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
    <!-- almost used in all projects -->
    <dependency>
      <groupId>com.github.pathikrit</groupId>
      <artifactId>better-files_${scala-binary-version}</artifactId>
      <version>${better-files-version}</version>
    </dependency>
    <dependency>
      <groupId>com.beachape</groupId>
      <artifactId>enumeratum_${scala-binary-version}</artifactId>
      <version>${enumeratum-version}</version>
    </dependency>
    <!-- joda-time is used in all projects -->
    <dependency>
      <groupId>joda-time</groupId>
      <artifactId>joda-time</artifactId>
      <version>${jodatime-version}</version>
    </dependency>
    <!-- standard utility to deep modify immutable structures -->
    <dependency>
      <groupId>com.softwaremill.quicklens</groupId>
      <artifactId>quicklens_${scala-binary-version}</artifactId>
      <version>${quicklens-version}</version>
    </dependency>
    <!-- this is now standard -->
    <dependency>
      <groupId>org.typelevel</groupId>
      <artifactId>cats-core_${scala-binary-version}</artifactId>
      <version>${cats-version}</version>
    </dependency>
    <!-- zio to manage effects -->
    <dependency>
      <groupId>dev.zio</groupId>
      <artifactId>zio_${scala-binary-version}</artifactId>
      <version>${dev-zio-version}</version>
    </dependency>
    <dependency>
      <groupId>dev.zio</groupId>
      <artifactId>zio-stacktracer_${scala-binary-version}</artifactId>
      <version>${dev-zio-version}</version>
    </dependency>
    <dependency>
      <groupId>dev.zio</groupId>
      <artifactId>zio-concurrent_${scala-binary-version}</artifactId>
      <version>${dev-zio-version}</version>
    </dependency>
    <dependency>
      <groupId>dev.zio</groupId>
      <artifactId>zio-streams_${scala-binary-version}</artifactId>
      <version>${dev-zio-version}</version>
    </dependency>
    <dependency>
      <groupId>dev.zio</groupId>
      <artifactId>zio-json_${scala-binary-version}</artifactId>
      <version>${zio-json-version}</version>
    </dependency>
    <dependency>
      <groupId>dev.zio</groupId>
      <artifactId>zio-json-yaml_${scala-binary-version}</artifactId>
      <version>${zio-json-version}</version>
    </dependency>
    <!-- explicit version needed -->
    <dependency>
      <groupId>dev.zio</groupId>
      <artifactId>izumi-reflect_${scala-binary-version}</artifactId>
      <version>${izumi-version}</version>
    </dependency>
    <!-- use explicit version for magnolia, else conflict in difflicious -->
    <dependency>
      <groupId>com.softwaremill.magnolia1_3</groupId>
      <artifactId>magnolia_${scala-binary-version}</artifactId>
      <version>${magnolia-version}</version>
    </dependency>
    <!-- explicit snakeyaml dependency to override default zio-json-version -->
    <dependency>
      <groupId>org.yaml</groupId>
      <artifactId>snakeyaml</artifactId>
      <version>${snakeyaml-version}</version>
    </dependency>
    <dependency>
      <groupId>io.scalaland</groupId>
      <artifactId>chimney_${scala-binary-version}</artifactId>
      <version>${chimney-version}</version>
    </dependency>
    <dependency>
      <groupId>io.scalaland</groupId>
      <artifactId>chimney-cats_${scala-binary-version}</artifactId>
      <version>${chimney-version}</version>
    </dependency>
    <!-- zio/cats compat -->
    <dependency>
      <groupId>dev.zio</groupId>
      <artifactId>zio-interop-cats_${scala-binary-version}</artifactId>
      <version>${zio-cats-version}</version>
    </dependency>
    <dependency>
      <groupId>org.typelevel</groupId>
      <artifactId>cats-effect_${scala-binary-version}</artifactId>
      <version>${cats-effect-version}</version>
    </dependency>
    <!-- graph library for group properties -->
    <dependency>
      <groupId>org.jgrapht</groupId>
      <artifactId>jgrapht-core</artifactId>
      <version>${jgrapht-version}</version>
    </dependency>

    <!--  test -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit-version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.specs2</groupId>
      <artifactId>specs2-core_${scala-binary-version}</artifactId>
      <version>${specs2-version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.specs2</groupId>
      <artifactId>specs2-matcher-extra_${scala-binary-version}</artifactId>
      <version>${specs2-version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.specs2</groupId>
      <artifactId>specs2-junit_${scala-binary-version}</artifactId>
      <version>${specs2-version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.tpolecat</groupId>
      <artifactId>doobie-specs2_${scala-binary-version}</artifactId>
      <version>${doobie-version}</version>
      <scope>test</scope>
    </dependency>    <!-- zio tests -->
    <dependency>
      <groupId>dev.zio</groupId>
      <artifactId>zio-test_${scala-binary-version}</artifactId>
      <version>${dev-zio-version}</version>
      <scope>test</scope>
    </dependency>    <!-- zio tests -->
    <dependency> <!-- MigrationLiftjson2Ziojson, see if useful in other tests afterward -->
      <groupId>dev.zio</groupId>
      <artifactId>zio-test-magnolia_${scala-binary-version}</artifactId>
      <version>${dev-zio-version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>dev.zio</groupId>
      <artifactId>zio-test-junit_${scala-binary-version}</artifactId>
      <version>${dev-zio-version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.github.jatcwang</groupId>
      <artifactId>difflicious-core_3</artifactId>
      <version>${difflicious-version}</version>
      <scope>test</scope>
    </dependency>

    <!--
        included to use slf4j native backend
        If you want to use another backend,
        exclude these dependencies from parent
    -->
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-core</artifactId>
      <version>${logback-version}</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>${logback-version}</version>
    </dependency>
    <dependency>
      <groupId>org.codehaus.janino</groupId>
      <artifactId>janino</artifactId>
      <version>${janino-version}</version>
    </dependency>
  </dependencies>

</project>
