<?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.cayenne.modeler</groupId>
		<artifactId>cayenne-modeler-parent</artifactId>
		<version>4.1.1</version>
	</parent>

	<artifactId>cayenne-modeler</artifactId>
	<name>cayenne-modeler: Cayenne Modeler Core</name>
	<packaging>jar</packaging>

	<dependencies>

		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
		</dependency>

		<dependency>
			<groupId>com.jgoodies</groupId>
			<artifactId>forms</artifactId>
		</dependency>

		<dependency>
			<groupId>org.apache.cayenne</groupId>
			<artifactId>cayenne-server</artifactId>
			<version>${project.version}</version>
		</dependency>

		<dependency>
			<groupId>org.apache.cayenne</groupId>
			<artifactId>cayenne-project</artifactId>
			<version>${project.version}</version>
		</dependency>

		<dependency>
			<groupId>org.apache.cayenne</groupId>
			<artifactId>cayenne-cgen</artifactId>
			<version>${project.version}</version>
		</dependency>

		<dependency>
			<groupId>org.apache.cayenne</groupId>
			<artifactId>cayenne-dbsync</artifactId>
			<version>${project.version}</version>
		</dependency>

		<dependency>
			<groupId>org.apache.cayenne.modeler</groupId>
			<artifactId>cayenne-wocompat</artifactId>
			<version>${project.version}</version>
		</dependency>

		<dependency>
			<groupId>ognl</groupId>
			<artifactId>ognl</artifactId>
		</dependency>

		<dependency>
			<groupId>jgraph</groupId>
			<artifactId>jgraph</artifactId>
		</dependency>

		<dependency>
			<groupId>com.mockrunner</groupId>
			<artifactId>mockrunner-jdbc</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<!-- this one have old Xerces dependency that clashes with JDK's one -->
					<groupId>nekohtml</groupId>
					<artifactId>nekohtml</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>


    <profiles>
        <profile>
            <id>code-quality</id>

            <activation>
                <property>
                    <name>!fast-and-dirty</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-checkstyle-plugin</artifactId>
                        <!--<configuration>
                            <suppressionsLocation>${project.basedir}/cayenne-checkstyle-suppression.xml</suppressionsLocation>
                        </configuration>-->
                    </plugin>
                    <plugin>
                        <artifactId>maven-pmd-plugin</artifactId>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>
