<?xml version="1.0" encoding="UTF-8"?>
<!--
  ============LICENSE_START=======================================================
   Copyright (C) 2019-2020 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.

  SPDX-License-Identifier: Apache-2.0
  ============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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.o-ran-sc</groupId>
    <artifactId>nonrtric</artifactId>
    <version>2.2.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>nonrtric</name>
    <properties>
    <sonar-maven-plugin.version>3.7.0.1746</sonar-maven-plugin.version>
    </properties>
    <modules>
        <module>policy-agent</module>
        <module>information-coordinator-service</module>
        <module>r-app-catalogue</module>
        <module>helm-manager</module>
        <module>dmaap-adaptor-java</module>
    </modules>
    <build>
        <plugins>
            <!-- support sonar in multi-module project -->
            <plugin>
                <groupId>org.sonarsource.scanner.maven</groupId>
                <artifactId>sonar-maven-plugin</artifactId>
                <version>${sonar-maven-plugin.version}</version>
            </plugin>
        </plugins>
    </build>
</project>
