<?xml version="1.0" encoding="UTF-8"?>
<!--
  Copyright (c) 2012, 2018 Eclipse Foundation and others.
  All rights reserved. This program and the accompanying materials
  are made available under the terms of the Eclipse Distribution License v1.0
  which accompanies this distribution, and is available at
  http://www.eclipse.org/org/documents/edl-v10.php
 
  Contributors:
    Thanh Ha (Eclipse Foundation) - initial implementation
-->

<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.eclipse.webtools.dali</groupId>
    <artifactId>org.eclipse.webtools.dali</artifactId>
    <version>3.4.0-SNAPSHOT</version>
    <relativePath>../../../</relativePath>
  </parent>

  <groupId>org.eclipse.webtools.dali</groupId>
  <artifactId>org.eclipse.jpt.jpa.eclipselink.core.tests</artifactId>
  <version>2.4.2-SNAPSHOT</version>
  <packaging>eclipse-test-plugin</packaging>

  <properties>
    <org.eclipse.jpt.jpa.jar>${project.build.directory}/dependency/javax.persistence-2.2.0.jar</org.eclipse.jpt.jpa.jar>
    <org.eclipse.jpt.eclipselink.jar>${project.build.directory}/dependency/eclipselink-2.7.1.jar</org.eclipse.jpt.eclipselink.jar>
    <testSuite>${project.artifactId}</testSuite>
    <testClass>org.eclipse.jpt.jpa.eclipselink.core.tests.internal.resource.JptJpaEclipseLinkCoreResourceModelTests</testClass>
  </properties>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.8</version>
        <executions>
          <execution>
            <id>get-dependencies</id>
            <phase>process-resources</phase>
            <goals>
              <goal>copy</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>org.eclipse.persistence</groupId>
                  <artifactId>javax.persistence</artifactId>
                  <version>2.2.0</version>
                </artifactItem>
                <artifactItem>
                  <groupId>org.eclipse.persistence</groupId>
                  <artifactId>eclipselink</artifactId>
                  <version>2.7.1</version>
                </artifactItem>
              </artifactItems>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.eclipse.tycho</groupId>
        <artifactId>tycho-surefire-plugin</artifactId>
        <version>${tycho.version}</version>
        <configuration>
          <systemProperties combine.children="append">
            <org.eclipse.jpt.jpa.jar>${org.eclipse.jpt.jpa.jar}</org.eclipse.jpt.jpa.jar>
            <org.eclipse.jpt.eclipselink.jar>${org.eclipse.jpt.eclipselink.jar}</org.eclipse.jpt.eclipselink.jar>
          </systemProperties>
          <dependencies>
            <dependency>
              <type>p2-installable-unit</type>
              <artifactId>javax.persistence</artifactId>
              <version>0.0.0</version>
            </dependency>
          </dependencies>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
