<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements. See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership. The ASF licenses this file
  ~ to you 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">
    <parent>
        <artifactId>custos</artifactId>
        <groupId>org.apache.custos</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <packaging>pom</packaging>
    <modules>
        <module>tenant-profile-core-service-client-stub</module>
        <module>iam-admin-core-service-client-stub</module>
        <module>credential-store-core-service-client-stubs</module>
        <module>federated-authentication-core-service-client-stub</module>
        <module>identity-core-service-client-stub</module>
        <module>user-profile-core-service-client-stub</module>
        <module>agent-profile-core-service-client-stub</module>
        <module>cluster-management-core-service-client-stub</module>
        <module>resource-secret-core-service-client-stub</module>
        <module>sharing-core-service-client-stub</module>
        <module>custos-logging-client-stub</module>
        <module>messaging-core-service-client-stub</module>
    </modules>
    <artifactId>custos-core-services-client-stubs</artifactId>

    

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>

    </build>

</project>