<?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.
-->
<!--
    Maven release plugin requires the project tag to be on a single line.
-->
<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.openjpa</groupId>
        <artifactId>openjpa-parent</artifactId>
        <version>3.2.3-SNAPSHOT</version>
    </parent>

    <artifactId>openjpa-slice</artifactId>
    <packaging>jar</packaging>
    <name>OpenJPA Slice</name>
    <description>OpenJPA Slice</description>

    <dependencies>
        <dependency>
            <groupId>org.apache.openjpa</groupId>
            <artifactId>openjpa-kernel</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.openjpa</groupId>
            <artifactId>openjpa-jdbc</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-jpa_2.2_spec</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.openjpa</groupId>
            <artifactId>openjpa-persistence</artifactId>
            <version>${project.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.openjpa</groupId>
            <artifactId>openjpa-persistence-jdbc</artifactId>
            <version>${project.version}</version>
            <classifier>tests</classifier>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <profiles>
        <!-- Default is to test with Embedded Derby, which is setup in
             persistence.xml to create the required slices -->

        <!-- Sample profile for testing with MySQL DB -->
        <profile>
            <!-- different id, so this doesn't run during automated testing -->
            <id>test-mysql-slice</id>
            <activation>
                <activeByDefault>false</activeByDefault>
                <property>
                    <name>test-mysql-slice</name>
                </property>
            </activation>
            <dependencies>
                <dependency>
                    <groupId>com.mysql</groupId>
                    <artifactId>mysql-connector-j</artifactId>
                    <version>${mysql.connector.version}</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
            <properties>
                <connection.driver.name>com.mysql.cj.jdbc.Driver</connection.driver.name>
                <connection.url>${openjpa.mysql.url}</connection.url>
                <connection.username>${openjpa.mysql.username}</connection.username>
                <connection.password>${openjpa.mysql.password}</connection.password>
                <!-- DBCP overrides for MySQL testing -->
                <dbcp.maxIdle>0</dbcp.maxIdle>
                <dbcp.minIdle>0</dbcp.minIdle>
            </properties>
        </profile>
    </profiles>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>process-test-classes</phase>
                        <configuration>
                            <target>
                                <ant antfile="src/main/ant/enhancer.xml" target="enhance" inheritRefs="true">
                                    <property name="maven.test.skip" value="${maven.test.skip}" />
                                    <property name="test" value="${test}" />
                                    <property name="outdir" value="${project.build.outputDirectory}" />
                                    <property name="project.build.testOutputDirectory" value="${project.build.testOutputDirectory}" />
                                    <property name="openjpa.Log" value="${openjpa.Log}" />
                                </ant>
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <argLine>${test.jvm.arguments}</argLine>
                    <excludes>
                        <exclude>**/TestQueryMultiThreaded.java</exclude>

                        <!-- exclude classes that include a $; inner classes
                             are not test cases per OpenJPA standards -->
                        <exclude>org/apache/openjpa/**/*$*.class</exclude>
                        <exclude>org/apache/openjpa/**/*.*.class</exclude>

                    </excludes>
                    <systemProperties>
                        <property>
                            <name>openjpa.Log</name>
                            <value>${openjpa.Log}</value>
                        </property>
                        <property>
                            <name>derby.stream.error.file</name>
                            <value>target/derby.log</value>
                        </property>
                    </systemProperties>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
