<?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>tooling</artifactId>
    <version>2.12.0</version>
  </parent>

  <artifactId>archetypes</artifactId>
  <name>Camel :: Archetypes</name>
  <description>Camel Archetypes</description>
  <packaging>pom</packaging>

  <modules>
    <module>camel-archetype-activemq</module>
    <module>camel-archetype-blueprint</module>
    <module>camel-archetype-component</module>
    <module>camel-archetype-component-scala</module>
    <module>camel-archetype-dataformat</module>
    <module>camel-archetype-groovy</module>
    <module>camel-archetype-java</module>
    <module>camel-archetype-scala</module>
    <module>camel-archetype-spring</module>
    <module>camel-archetype-spring-dm</module>
    <module>camel-archetype-web</module>
    <module>camel-archetype-webconsole</module>
  </modules>
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-eclipse-plugin</artifactId>
          <configuration>
            <buildcommands>
                <java.lang.String>com.atlassw.tools.eclipse.checkstyle.CheckstyleBuilder</java.lang.String>
            </buildcommands>
            <projectnatures>
                <nature>com.atlassw.tools.eclipse.checkstyle.CheckstyleNature</nature>
            </projectnatures>
            <additionalConfig>
              <file>
                <name>.checkstyle</name>
                <location>/camel-eclipse-checkstyle</location>
              </file>
            </additionalConfig>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>
