<?xml version="1.0"?>
<!--
  ~ 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 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
  xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.apache.servicecomb.demo</groupId>
    <artifactId>demo-pojo</artifactId>
    <version>2.7.6</version>
  </parent>
  <artifactId>pojo-client</artifactId>
  <name>Java Chassis::Demo::POJO::Client</name>

  <dependencies>
    <dependency>
      <groupId>org.apache.servicecomb.demo</groupId>
      <artifactId>demo-schema</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.servicecomb</groupId>
      <artifactId>provider-pojo</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.servicecomb</groupId>
      <artifactId>metrics-core</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.servicecomb</groupId>
      <artifactId>foundation-test-scaffolding</artifactId>
      <scope>compile</scope>
    </dependency>
  </dependencies>

  <properties>
    <demo.main>org.apache.servicecomb.demo.pojo.client.PojoClient</demo.main>
  </properties>
  <build>
    <plugins>
      <!-- Because other demos depend on this module, if add classpath, the depended module will fail dual to spring configuration files duplication.
         So, we remove maven-dependency-plugin to make all integration tests run. In your applications, still need to add this to make packaged jar files run.
       -->
      <!--
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
      </plugin>
      -->
      <plugin>
        <groupId>com.github.odavid.maven.plugins</groupId>
        <artifactId>mixin-maven-plugin</artifactId>
        <configuration>
          <mixins>
            <mixin>
              <groupId>org.apache.servicecomb.demo</groupId>
              <artifactId>docker-run-config</artifactId>
              <version>${project.version}</version>
            </mixin>
          </mixins>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <profiles>
    <profile>
      <id>docker</id>
      <properties>
        <demo.service.name>pojo-server</demo.service.name>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>io.fabric8</groupId>
            <artifactId>docker-maven-plugin</artifactId>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>
