<?xml version="1.0" encoding="UTF-8"?>
<!--
  Tencent is pleased to support the open source community by making
  Firestorm-Spark remote shuffle server available.

  Copyright (C) 2021 THL A29 Limited, a Tencent company.  All rights reserved.

  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

  https://opensource.org/licenses/Apache-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 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>
  <parent>
    <artifactId>rss-main</artifactId>
    <groupId>com.tencent.rss</groupId>
    <version>0.1.0</version>
  </parent>

  <artifactId>rss-proto</artifactId>
  <name>Remote Shuffle Service Protocols</name>

  <dependencies>
    <dependency>
      <groupId>com.google.protobuf</groupId>
      <artifactId>protobuf-java-util</artifactId>
    </dependency>
    <dependency>
      <groupId>io.grpc</groupId>
      <artifactId>grpc-netty-shaded</artifactId>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>io.grpc</groupId>
      <artifactId>grpc-protobuf</artifactId>
    </dependency>
    <dependency>
      <groupId>io.grpc</groupId>
      <artifactId>grpc-stub</artifactId>
    </dependency>
  </dependencies>

  <build>

    <extensions>
      <!-- Use os-maven-plugin to initialize the "os.detected" properties -->
      <extension>
        <groupId>kr.motd.maven</groupId>
        <artifactId>os-maven-plugin</artifactId>
        <version>1.6.2</version>
      </extension>
    </extensions>

    <plugins>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <compilerArgs>
              <!-- disable all javac warnings for shaded sources -->
              <arg>-Xlint:none</arg>
              <arg>-XDignore.symbol.file</arg>
            </compilerArgs>
            <showWarnings>false</showWarnings>
          </configuration>
      </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-checkstyle-plugin</artifactId>
          <configuration/>
        </plugin>

        <!-- Make a jar and put the sources in the jar -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-source-plugin</artifactId>
        </plugin>

        <plugin>
          <!--Make it so assembly:single does nothing in here-->
          <artifactId>maven-assembly-plugin</artifactId>
          <configuration>
              <skipAssembly>true</skipAssembly>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.xolstice.maven.plugins</groupId>
          <artifactId>protobuf-maven-plugin</artifactId>
          <configuration>
            <protocArtifact>
                com.google.protobuf:protoc:3.12.0:exe:${os.detected.classifier}
            </protocArtifact>
            <!-- Place these in a location that compiler-plugin is already looking -->
            <outputDirectory>${project.build.directory}/generated-sources</outputDirectory>
            <!-- With multiple executions, this must be `false` otherwise we wipe out the previous execution -->
            <clearOutputDirectory>false</clearOutputDirectory>
          </configuration>
          <executions>
            <execution>
              <id>compile-protobuf</id>
              <phase>generate-sources</phase>
              <goals>
                <goal>compile</goal>
              </goals>
            </execution>
            <execution>
              <id>compile-grpc</id>
              <phase>generate-sources</phase>
              <goals>
                <goal>compile-custom</goal>
              </goals>
              <configuration>
                <pluginId>grpc-java</pluginId>
                <pluginArtifact>
                  io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}
                </pluginArtifact>
              </configuration>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <executions>
            <execution>
              <!-- Replace the "default" jar-plugin execution -->
              <!-- This is a super-dirty hack to work around Yetus
                   PreCommit not using the package lifecycle phase -->
              <id>default-jar</id>
              <phase>process-classes</phase>
              <goals>
                <goal>jar</goal>
              </goals>
            </execution>
          </executions>
        </plugin>

    </plugins>
  </build>

</project>
