<?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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-yaml-dsl-parent</artifactId>
        <version>3.18.1</version>
    </parent>

    <artifactId>camel-yaml-dsl-deserializers</artifactId>
    <packaging>jar</packaging>
    <name>Camel :: YAML DSL :: Deserializers </name>
    <description>Camel DSL with YAML Deserializers</description>

    <properties>
        <firstVersion>3.9.0</firstVersion>
        <sourcecheckExcludes>
            **/*.groovy
        </sourcecheckExcludes>
        <sourcecheckExcludesComma>
            ${sourcecheckExcludes},
        </sourcecheckExcludesComma>
        <camel-prepare-component>false</camel-prepare-component>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-yaml-dsl-common</artifactId>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.spockframework</groupId>
            <artifactId>spock-core</artifactId>
            <version>${spock-version}</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.codehaus.groovy</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy</artifactId>
            <version>${groovy-version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-test</artifactId>
            <version>${groovy-version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-jcl</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.camel</groupId>
                <artifactId>camel-yaml-dsl-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>generate-yaml-deserializers</goal>
                        </goals>
                        <configuration>
                            <packageName>org.apache.camel.dsl.yaml.deserializers</packageName>
                            <bannedDefinitions>
                                <bannedDefinition>org.apache.camel.model.FromDefinition</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.language.ExpressionDefinition</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.ExpressionSubElementDefinition</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.PropertyDefinitions</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.KameletDefinition</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.RouteTemplateDefinition</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.RouteTemplateContextRefDefinition</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.RouteTemplatesDefinition</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.RouteTemplateBeanDefinition</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.TemplatedRouteDefinition</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.TemplatedRoutesDefinition</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.TemplatedRouteBeanDefinition</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.RoutesDefinition</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.RestsDefinition</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.RouteConfigurationDefinition</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.RouteConfigurationsDefinition</bannedDefinition>
                            </bannedDefinitions>
                            <additionalDefinitions>
                                <!-- saga -->
                                <additionalDefinition>org.apache.camel.model.SagaActionUriDefinition</additionalDefinition>
                            </additionalDefinitions>
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.camel</groupId>
                        <artifactId>camel-catalog</artifactId>
                        <version>${project.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

</project>
