<!--
    Copyright 2018 the original author or authors.

    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.

    pom.xml

    This test validates that go proto outputs are committed to git.  It does this
    by regenerating them and validating whether git thinks they are the same. If
    they become out of sync, there can be problems for consumers of the protos.
-->
<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>opencord</groupId>
  <artifactId>voltha-protos</artifactId>
  <version>3.0-SNAPSHOT</version>

  <properties>
     <maven.compiler.source>1.8</maven.compiler.source>
     <maven.compiler.target>1.8</maven.compiler.target>
     <encoding>UTF-8</encoding>
  </properties>

<dependencies>
<!-- https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java -->
  <dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java</artifactId>
    <version>3.10.0</version>
  </dependency>
  <dependency>
    <groupId>com.google.api.grpc</groupId>
    <artifactId>googleapis-common-protos</artifactId>
    <version>0.0.3</version>
  </dependency>
</dependencies>

</project>
