<!--
  ============LICENSE_START=======================================================
  Copyright (c) 2020 Linux Foundation.
  Modifications Copyright (C) 2021 Bell Canada.
  Modification Copyright (C) 2021 Nordix Foundation
  ================================================================================
  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.
  ============LICENSE_END=========================================================
-->

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.onap.oparent</groupId>
        <artifactId>oparent</artifactId>
        <version>3.2.0</version>
    </parent>

    <groupId>org.onap.cps</groupId>
    <artifactId>cps-aggregator</artifactId>
    <version>1.1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>cps</name>
    <description>ONAP Configuration Persistence Service</description>

    <organization>
        <name>ONAP - CPS</name>
        <url>http://www.onap.org/</url>
    </organization>

    <properties>
        <maven.deploy.skip>true</maven.deploy.skip>
        <maven.install.skip>true</maven.install.skip>
    </properties>

    <modules>
        <module>cps-dependencies</module>
        <module>cps-bom</module>
        <module>cps-parent</module>
        <module>cps-service</module>
        <module>cps-rest</module>
        <module>cps-ncmp-service</module>
        <module>cps-ncmp-rest</module>
        <module>cps-ri</module>
        <module>checkstyle</module>
        <module>spotbugs</module>
        <module>cps-application</module>
    </modules>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>versions-maven-plugin</artifactId>
                <version>2.8.1</version>
                <configuration>
                    <processAllModules>true</processAllModules>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
