<?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
    Nick Boldt (Red Hat Inc.) - support for Tycho 1.1 and upstream component builds
-->

<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</groupId>
    <artifactId>wtp-parent</artifactId>
    <version>3.10.0-SNAPSHOT</version>
    <relativePath>../wtp-parent</relativePath>
  </parent>

  <groupId>org.eclipse.webtools.servertools</groupId>
  <artifactId>org.eclipse.webtools.servertools</artifactId>
  <version>3.6.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <properties>
    <tycho.scmUrl>scm:git:git://git.eclipse.org/gitroot/servertools/webtools.servertools.git</tycho.scmUrl>
  </properties>

  <repositories>
    <repository>
      <id>webtools-common-site</id>
      <layout>p2</layout>
      <url>${webtools-common-site}</url>
    </repository>

    <!-- To reference parent pom -->
    <repository>
      <id>Webtools Repository - Releases</id>
      <name>Webtools Repository - Releases</name>
      <url>https://repo.eclipse.org/content/repositories/webtools-releases/</url>
    </repository>
    <repository>
      <id>Webtools Repository - Snapshots</id>
      <name>Webtools Repository - Snapshots</name>
      <url>https://repo.eclipse.org/content/repositories/webtools-snapshots/</url>
    </repository>
  </repositories>

  <profiles>
    <profile>
      <id>normal</id>
      <activation>
        <activeByDefault>true</activeByDefault>
        <property>
          <name>skipITests</name>
          <value>true</value>
        </property>
      </activation>
      <properties>
        <skipITests>true</skipITests>
        <!-- prevent resolving stuff in this repo from upstream CI build of this repo, to avoid source build problems -->
        <webtools-servertools-site>${webtools-common-site}</webtools-servertools-site>
        <webtools-servertools-integration-site>${webtools-common-site}</webtools-servertools-integration-site>
      </properties>
      <modules>
        <module>features</module>

        <module>docs/org.eclipse.jst.server.ui.doc.user</module>
        <module>docs/org.eclipse.jst.server.ui.infopop</module>
        <module>docs/org.eclipse.server.doc.isv</module>
        <module>docs/org.eclipse.servertools.doc.isv</module>
        <module>docs/org.eclipse.wst.server.ui.doc.user</module>
        <module>docs/org.eclipse.wst.server.ui.infopop</module>

        <module>plugins/org.eclipse.jst.server.core</module>
        <module>plugins/org.eclipse.jst.server.generic.core</module>
        <module>plugins/org.eclipse.jst.server.generic.jboss</module>
        <module>plugins/org.eclipse.jst.server.generic.jonas</module>
        <module>plugins/org.eclipse.jst.server.generic.oc4j</module>
        <module>plugins/org.eclipse.jst.server.generic.ui</module>
        <module>plugins/org.eclipse.jst.server.websphere.core</module>

        <module>plugins/org.eclipse.jst.server.preview.adapter</module>
        <module>plugins/org.eclipse.jst.server.tomcat.core</module>
        <module>plugins/org.eclipse.jst.server.tomcat.ui</module>
        <module>plugins/org.eclipse.jst.server.ui</module>

        <module>plugins/org.eclipse.wst.internet.monitor.core</module>
        <module>plugins/org.eclipse.wst.internet.monitor.ui</module>
        <module>plugins/org.eclipse.wst.server.core</module>
        <module>plugins/org.eclipse.wst.server.discovery</module>
        <module>plugins/org.eclipse.wst.server.http.core</module>
        <module>plugins/org.eclipse.wst.server.http.ui</module>
        <module>plugins/org.eclipse.wst.server.preview</module>
        <module>plugins/org.eclipse.wst.server.preview.adapter</module>
        <module>plugins/org.eclipse.wst.server.ui</module>

        <module>tests/org.eclipse.wst.internet.monitor.core.tests</module>
        <module>tests/org.eclipse.wst.server.core.tests</module>
        <module>tests/org.eclipse.wst.server.http.core.tests</module>
        <module>tests/org.eclipse.wst.server.util.tests</module>

        <module>site</module>
      </modules>
    </profile>

    <!-- NOTE: you must enable the CI profile to resolve dependencies -->
    <profile>
      <id>integration-tests</id>
      <activation>
        <property>
          <name>skipITests</name>
          <value>false</value>
        </property>
      </activation>
      <properties>
        <skipITests>false</skipITests>
        <!-- prevent resolving stuff in this repo from upstream CI build of this repo, to avoid source build problems -->
        <webtools-servertools-integration-site>${webtools-common-site}</webtools-servertools-integration-site>
      </properties>
      <modules>
        <!-- aggregated in repositoryunittests repo -->
        <module>features/org.eclipse.jst.server_adapters.ext_tests.feature</module>
        <module>features/org.eclipse.wst.server_tests.feature</module>
        <module>features/org.eclipse.jst.server_tests.feature</module>
        <module>tests/org.eclipse.jst.server.core.tests</module>
        <module>tests/org.eclipse.jst.server.generic.tests</module>
        <module>tests/org.eclipse.jst.server.tomcat.core.tests</module>
        <module>tests/org.eclipse.jst.server.tomcat.ui.tests</module>
        <module>tests/org.eclipse.jst.server.ui.tests</module>
        <module>tests/org.eclipse.wst.internet.monitor.ui.tests</module>
        <module>tests/org.eclipse.wst.server.ui.tests</module>

        <!-- performance tests, not yet in the repositoryunittests repo -->
        <module>tests/org.eclipse.jst.server.tomcat.tests.performance</module>
        <module>tests/org.eclipse.wst.server.tests.performance</module>

        <module>site-integration</module>
      </modules>
    </profile>
  </profiles>

</project>