<?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 current 
    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">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.apache.tamaya.ext</groupId>
        <artifactId>tamaya-sandbox</artifactId>
        <version>0.4-incubating-SNAPSHOT</version>
    </parent>
    <artifactId>tamaya-uom_beta</artifactId>
    <name>Apache Tamaya Modules - Units of Measurement Support</name>
    <description>This modules provides a set of property converters to support
        JSR 363 implementations in conjunction with Apache Tamaya.</description>
    <inceptionYear>2017</inceptionYear>

    <properties>
        <jsr363.version>1.0</jsr363.version>
        <jsr363.ri.version>1.0.1</jsr363.ri.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.tamaya</groupId>
            <artifactId>tamaya-api</artifactId>
            <version>${project.parent.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.tamaya</groupId>
            <artifactId>tamaya-core</artifactId>
            <version>${project.parent.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>java-hamcrest</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
        </dependency>

        <dependency>
            <groupId>javax.measure</groupId>
            <artifactId>unit-api</artifactId>
            <version>${jsr363.version}</version>
        </dependency>
        
        <!-- TODO could use scope test maybe -->
        <dependency>
            <groupId>tec.units</groupId>
            <artifactId>unit-ri</artifactId>
            <version>${jsr363.ri.version}</version>
        </dependency>
    </dependencies>
</project>
