<?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.deltaspike</groupId>
        <artifactId>parent</artifactId>
        <version>1.8.0</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <artifactId>parent-code</artifactId>

    <packaging>pom</packaging>

    <name>Apache DeltaSpike Code Parent</name>
    <description>Apache DeltaSpike Parent for container projects</description>

    <properties>
        <container.unpack.directory>${java.io.tmpdir}/deltaspike-arquillian-containers</container.unpack.directory>
        <jboss.as.version>7.1.1.Final</jboss.as.version>
        <wildfly.version>9.0.2.Final</wildfly.version>
        <wildfly.arquillian.version>1.0.2.Final</wildfly.arquillian.version>
        <glassfish3.version>3.1.2.2</glassfish3.version>
        <glassfish4.version>4.0</glassfish4.version>
        <payara.version>4.1.1.162</payara.version>
        <wls.version>12.1</wls.version>
    </properties>


    <dependencyManagement>
        <dependencies>
            <!-- imports don't get inherited! -->
            <dependency>
                <groupId>org.jboss.arquillian</groupId>
                <artifactId>arquillian-bom</artifactId>
                <version>${arquillian.version}</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.apache.deltaspike.test</groupId>
            <artifactId>test-utils</artifactId>
            <version>${project.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>${maven.surefire.plugin.version}</version>
                    <configuration>
                        <systemProperties>
                            <org.apache.deltaspike.ProjectStage>UnitTest</org.apache.deltaspike.ProjectStage>
                            <cdicontainer.version>${cdicontainer.version}</cdicontainer.version>
                        </systemProperties>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>test-jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <inherited>true</inherited>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>

                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>


    <profiles>

        <profile>
            <id>JBossArchive</id>
            <repositories>
                <repository>
                    <id>JBoss-Archive</id>
                    <name>JBoss Archive</name>
                    <url>https://repository.jboss.org/nexus/content/groups/public</url>
                </repository>
            </repositories>
        </profile>

        <profile>
            <id>JBossSnapshots</id>
            <repositories>
                <repository>
                    <id>JBoss-Snapshots</id>
                    <name>JBoss Snapshots</name>
                    <url>https://repository.jboss.org/nexus/content/repositories/snapshots/</url>
                </repository>
            </repositories>
        </profile>


        <profile>
            <!-- use this profile to compile and test DeltaSpike with Apache OpenWebBeans -->
            <id>OWB</id>

            <!-- ensures a correct build at analysis.apache.org -->
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>

            <properties>
                <cdicontainer.version>owb-${owb.version}</cdicontainer.version>
                <owb-arquillian.version>${owb.version}</owb-arquillian.version>
            </properties>

            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <systemProperties>
                                <cdicontainer.version>${cdicontainer.version}</cdicontainer.version>
                            </systemProperties>

                            <!-- Ignore these groups because they don't work with embedded OWB -->
                            <excludedGroups>
                                org.apache.deltaspike.test.category.WebProfileCategory,
                                org.apache.deltaspike.test.category.WebEE7ProfileCategory,
                                org.apache.deltaspike.test.category.FullProfileCategory,
                                org.apache.deltaspike.test.category.EnterpriseArchiveProfileCategory
                            </excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>

            <dependencies>
                <!-- OWB specific dependencies-->
                <dependency>
                    <groupId>org.apache.geronimo.specs</groupId>
                    <artifactId>geronimo-atinject_1.0_spec</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.apache.geronimo.specs</groupId>
                    <artifactId>geronimo-jcdi_1.0_spec</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.apache.geronimo.specs</groupId>
                    <artifactId>geronimo-interceptor_1.1_spec</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.apache.openwebbeans</groupId>
                    <artifactId>openwebbeans-impl</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.apache.openwebbeans</groupId>
                    <artifactId>openwebbeans-spi</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.apache.openwebbeans</groupId>
                    <artifactId>openwebbeans-resource</artifactId>
                </dependency>

                <dependency>
                    <groupId>org.apache.openwebbeans.arquillian</groupId>
                    <artifactId>owb-arquillian-standalone</artifactId>
                    <version>${owb-arquillian.version}</version>
                    <scope>test</scope>
                </dependency>

                <dependency>
                    <groupId>org.apache.bval</groupId>
                    <artifactId>bval-jsr303</artifactId>
                    <scope>test</scope>
                </dependency>
            </dependencies>
        </profile>

        <profile>
            <!-- use this profile to compile and test DeltaSpike with Apache OpenWebBeans 2.x -->
            <id>OWB15</id>

            <properties>
                <cdicontainer.version>owb-${owb.version}</cdicontainer.version>
            </properties>

            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <systemProperties>
                                <cdicontainer.version>${cdicontainer.version}</cdicontainer.version>
                            </systemProperties>

                            <!-- Ignore these groups because they don't work with embedded OWB -->
                            <excludedGroups>
                                org.apache.deltaspike.test.category.WebProfileCategory,
                                org.apache.deltaspike.test.category.WebEE7ProfileCategory,
                                org.apache.deltaspike.test.category.FullProfileCategory,
                                org.apache.deltaspike.test.category.EnterpriseArchiveProfileCategory
                            </excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>

            <dependencies>
                <!-- OWB specific dependencies-->
                <dependency>
                    <groupId>org.apache.geronimo.specs</groupId>
                    <artifactId>geronimo-atinject_1.0_spec</artifactId>
                </dependency>
                <dependency>
                    <!--X TODO move this to dependencyManagement once it is released -->
                    <groupId>org.apache.geronimo.specs</groupId>
                    <artifactId>geronimo-jcdi_1.1_spec</artifactId>
                    <version>${geronimo-jcdi-1.1-spec.version}</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.geronimo.specs</groupId>
                    <artifactId>geronimo-interceptor_1.2_spec</artifactId>
                    <version>${geronimo-interceptor-1.2-spec.version}</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.geronimo.specs</groupId>
                    <artifactId>geronimo-annotation_1.2_spec</artifactId>
                    <version>1.0.MR2-SNAPSHOT</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.geronimo.specs</groupId>
                    <artifactId>geronimo-el_2.2_spec</artifactId>
                    <version>1.0.2</version>
                </dependency>

                <dependency>
                    <groupId>org.apache.openwebbeans</groupId>
                    <artifactId>openwebbeans-impl</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.apache.openwebbeans</groupId>
                    <artifactId>openwebbeans-spi</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.apache.openwebbeans</groupId>
                    <artifactId>openwebbeans-resource</artifactId>
                </dependency>

                <dependency>
                    <groupId>org.apache.openwebbeans.arquillian</groupId>
                    <artifactId>owb-arquillian-standalone</artifactId>
                    <version>${owb.version}</version>
                    <scope>test</scope>
                </dependency>

                <dependency>
                    <groupId>org.apache.bval</groupId>
                    <artifactId>bval-jsr303</artifactId>
                    <scope>test</scope>
                </dependency>
            </dependencies>
        </profile>
        <!-- please note that when changing any of these weld profiles, they are also used in some projects.
        Make sure to update all pom's, if required -->
        <profile>
            <!-- use this profile to compile and test DeltaSpike with JBoss Weld 1.x on an embedded container-->
            <id>Weld1</id>

            <properties>
                <!-- Actual Weld version used with this profile -->
                <weld.version>1.1.34.Final</weld.version>
                <cdicontainer.version>weld-${weld.version}</cdicontainer.version>
            </properties>
            
            <dependencyManagement>
                <dependencies>
                    <!-- Weld Core BOM - used to fetch version of artifacts only -->
                    <dependency>
                        <groupId>org.jboss.weld</groupId>
                        <artifactId>weld-core-bom</artifactId>
                        <version>${weld.version}</version>
                        <type>pom</type>
                        <scope>import</scope>
                    </dependency>
                </dependencies>
            </dependencyManagement>
            
            <dependencies>
                <dependency>
                    <groupId>org.jboss.weld</groupId>
                    <artifactId>weld-core</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.jboss.weld.servlet</groupId>
                    <artifactId>weld-servlet-core</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.jboss.weld.servlet</groupId>
                    <artifactId>weld-servlet</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.jboss.weld.se</groupId>
                    <artifactId>weld-se</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.jboss.weld.se</groupId>
                    <artifactId>weld-se-core</artifactId>
                </dependency>
                
                <!--Other than Weld dependencies-->
                <dependency>
                    <groupId>javax.el</groupId>
                    <artifactId>el-api</artifactId>
                    <version>${weld.el.api}</version>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.geronimo.specs</groupId>
                    <artifactId>geronimo-jta_1.1_spec</artifactId>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.geronimo.specs</groupId>
                    <artifactId>geronimo-interceptor_1.1_spec</artifactId>
                </dependency>

                <!-- Test dependencies -->
                <dependency>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-simple</artifactId>
                    <version>${weld.sfl4j}</version>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.hibernate</groupId>
                    <artifactId>hibernate-validator</artifactId>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.jboss.arquillian.container</groupId>
                    <artifactId>arquillian-weld-ee-embedded-1.1</artifactId>
                    <version>${arquillian-weld.version}</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
            
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <systemProperties>
                                <cdicontainer.version>${cdicontainer.version}</cdicontainer.version>
                            </systemProperties>
                            <!-- Ignore these groups because they don't work with embedded Weld -->
                            <excludedGroups>
                                org.apache.deltaspike.test.category.WebProfileCategory,
                                org.apache.deltaspike.test.category.WebEE7ProfileCategory,
                                org.apache.deltaspike.test.category.FullProfileCategory,
                                org.apache.deltaspike.test.category.EnterpriseArchiveProfileCategory
                            </excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
        
        <profile>
            <!-- use this profile to compile and test DeltaSpike with JBoss Weld 2.x on an embedded container -->
            <id>Weld2</id>

            <properties>
                <!-- Actual Weld version used with this profile -->
                <weld.version>2.3.4.Final</weld.version>
                <cdicontainer.version>weld-${weld.version}</cdicontainer.version>
            </properties>
            
            <dependencyManagement>
                <dependencies>
                    <!-- Weld Core BOM - used to fetch version of artifacts only -->
                    <dependency>
                        <groupId>org.jboss.weld</groupId>
                        <artifactId>weld-core-bom</artifactId>
                        <version>${weld.version}</version>
                        <type>pom</type>
                        <scope>import</scope>
                    </dependency>
                </dependencies>
            </dependencyManagement>
            
            <dependencies>
                <dependency>
                    <groupId>org.jboss.weld</groupId>
                    <artifactId>weld-core-impl</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.jboss.weld.servlet</groupId>
                    <artifactId>weld-servlet</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.jboss.weld.servlet</groupId>
                    <artifactId>weld-servlet-core</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.jboss.weld.se</groupId>
                    <artifactId>weld-se</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.jboss.weld.se</groupId>
                    <artifactId>weld-se-core</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.jboss.weld</groupId>
                    <artifactId>weld-api</artifactId>
                </dependency>
                
                <!--Other than Weld dependencies-->
                <dependency>
                    <groupId>javax.el</groupId>
                    <artifactId>el-api</artifactId>
                    <version>${weld.el.api}</version>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.geronimo.specs</groupId>
                    <artifactId>geronimo-jta_1.1_spec</artifactId>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.geronimo.specs</groupId>
                    <artifactId>geronimo-interceptor_1.1_spec</artifactId>
                </dependency>

                <!-- Test dependencies -->
                <dependency>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-simple</artifactId>
                    <version>${weld.sfl4j}</version>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.hibernate</groupId>
                    <artifactId>hibernate-validator</artifactId>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.jboss.arquillian.container</groupId>
                    <artifactId>arquillian-weld-ee-embedded-1.1</artifactId>
                    <version>${arquillian-weld.version}</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
            
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <systemProperties>
                                <cdicontainer.version>${cdicontainer.version}</cdicontainer.version>
                            </systemProperties>
                            <!-- Ignore these groups because they don't work with embedded Weld -->
                            <excludedGroups>
                                org.apache.deltaspike.test.category.WebProfileCategory,
                                org.apache.deltaspike.test.category.WebEE7ProfileCategory,
                                org.apache.deltaspike.test.category.FullProfileCategory,
                                org.apache.deltaspike.test.category.EnterpriseArchiveProfileCategory
                            </excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
            
        <profile>
            <!-- use this profile to compile and test DeltaSpike with JBoss Weld 3.x on an embedded container -->
            <id>Weld3</id>

            <properties>
                <!-- Actual Weld version used with this profile -->
                <weld.version>3.0.0.Beta1</weld.version>
                <cdicontainer.version>weld-${weld.version}</cdicontainer.version>
                <java.version>1.8</java.version>
            </properties>
            
            <dependencyManagement>
                <dependencies>
                    <!-- Weld Core BOM - used to fetch version of artifacts only -->
                    <dependency>
                        <groupId>org.jboss.weld</groupId>
                        <artifactId>weld-core-bom</artifactId>
                        <version>${weld.version}</version>
                        <type>pom</type>
                        <scope>import</scope>
                    </dependency>
                </dependencies>
            </dependencyManagement>
            
            <dependencies>
                <dependency>
                    <groupId>org.jboss.weld</groupId>
                    <artifactId>weld-core-impl</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.jboss.weld.module</groupId>
                    <artifactId>weld-ejb</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.jboss.weld.module</groupId>
                    <artifactId>weld-jsf</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.jboss.weld.module</groupId>
                    <artifactId>weld-jta</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.jboss.weld.module</groupId>
                    <artifactId>weld-web</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.jboss.weld.servlet</groupId>
                    <artifactId>weld-servlet-shaded</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.jboss.weld.servlet</groupId>
                    <artifactId>weld-servlet-core</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.jboss.weld.se</groupId>
                    <artifactId>weld-se-shaded</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.jboss.weld.se</groupId>
                    <artifactId>weld-se-core</artifactId>
                </dependency>         
                <dependency>
                    <groupId>org.jboss.weld</groupId>
                    <artifactId>weld-api</artifactId>
                </dependency>
                
                <!--Other than Weld dependencies-->
                <dependency>
                    <groupId>javax.el</groupId>
                    <artifactId>el-api</artifactId>
                    <version>${weld.el.api}</version>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.geronimo.specs</groupId>
                    <artifactId>geronimo-jta_1.1_spec</artifactId>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.geronimo.specs</groupId>
                    <artifactId>geronimo-interceptor_1.1_spec</artifactId>
                </dependency>

                <!-- Test dependencies -->
                <dependency>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-simple</artifactId>
                    <version>${weld.sfl4j}</version>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.hibernate</groupId>
                    <artifactId>hibernate-validator</artifactId>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.jboss.arquillian.container</groupId>
                    <artifactId>arquillian-weld-ee-embedded-1.1</artifactId>
                    <version>${arquillian-weld.version}</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
            
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <systemProperties>
                                <cdicontainer.version>${cdicontainer.version}</cdicontainer.version>
                            </systemProperties>
                            <!-- Ignore these groups because they don't work with embedded Weld -->
                            <excludedGroups>
                                org.apache.deltaspike.test.category.WebProfileCategory,
                                org.apache.deltaspike.test.category.WebEE7ProfileCategory,
                                org.apache.deltaspike.test.category.FullProfileCategory,
                                org.apache.deltaspike.test.category.EnterpriseArchiveProfileCategory
                            </excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <!--
             * arquillian-tomee-remote isn't a real remote connector for a running server-instance
             *
             * DEBUGGING:
             * mvn test -Ptomee-build-managed -Dtest=UnitTestName -Dopenejb.server.debug=true
             * then use remote debuggig at port 5005
             *
            -->
            <id>tomee-build-managed</id>

            <properties>
                <cdicontainer.version>tomee-${tomee.version}</cdicontainer.version>
            </properties>

            <dependencies>
                <dependency>
                    <groupId>org.apache.openejb</groupId>
                    <artifactId>javaee-api</artifactId>
                    <version>6.0-5</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.openejb</groupId>
                    <artifactId>apache-tomee</artifactId>
                    <classifier>webprofile</classifier>
                    <version>${tomee.version}</version>
                    <scope>test</scope>
                    <type>zip</type>
                </dependency>
                <dependency>
                    <groupId>org.jboss.arquillian.testenricher</groupId>
                    <artifactId>arquillian-testenricher-cdi</artifactId>
                    <version>${arquillian.version}</version>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.openejb</groupId>
                    <artifactId>arquillian-tomee-remote</artifactId>
                </dependency>


                <!-- needed by arquillian-tomee-remote -->
                <dependency>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                    <version>1.1.1</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>

            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <version>${maven.surefire.plugin.version}</version>
                        <configuration>
                            <systemPropertyVariables>
                                <tomee.version>${tomee.version}</tomee.version>
                            </systemPropertyVariables>
                            <systemProperties>
                                <arquillian.launch>tomee</arquillian.launch>
                                <org.apache.deltaspike.ProjectStage>UnitTest</org.apache.deltaspike.ProjectStage>
                                <cdicontainer.version>${cdicontainer.version}</cdicontainer.version>
                            </systemProperties>

                            <!-- we just use groups to mark that a test should be executed only
                            with specific environments. even though a java-ee6 application server has to be able to run
                            all tests in theory, we have to exclude some tests because there are e.g. packaging issues or
                            there are currently issues with arquillian. if a test isn't restricted to an environment,
                            no category is used for the test-class. -->
                            <excludedGroups>
                                org.apache.deltaspike.test.category.WebEE7ProfileCategory,
                                org.apache.deltaspike.test.category.SeCategory
                            </excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <!--
             * This profile is a WIP
             * arquillian-tomee-remote isn't a real remote connector for a running server-instance
             *
             * DEBUGGING:
             * mvn test -Ptomee7-build-managed -Dtest=UnitTestName -Dopenejb.server.debug=true
             * then use remote debuggig at port 5005
             *
            -->
            <id>tomee7-build-managed</id>

            <properties>
                <tomee.version>7.0.2</tomee.version>
                <cdicontainer.version>tomee-${tomee.version}</cdicontainer.version>
            </properties>

            <dependencies>
                <dependency>
                    <groupId>org.apache.openejb</groupId>
                    <artifactId>javaee-api</artifactId>
                    <version>6.0-5</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.tomee</groupId>
                    <artifactId>apache-tomee</artifactId>
                    <classifier>webprofile</classifier>
                    <version>${tomee.version}</version>
                    <scope>test</scope>
                    <type>zip</type>
                </dependency>
                <dependency>
                    <groupId>org.jboss.arquillian.testenricher</groupId>
                    <artifactId>arquillian-testenricher-cdi</artifactId>
                    <version>${arquillian.version}</version>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.tomee</groupId>
                    <artifactId>arquillian-tomee-remote</artifactId>
                </dependency>


                <!-- needed by arquillian-tomee-remote -->
                <dependency>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                    <version>1.1.1</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>

            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <version>${maven.surefire.plugin.version}</version>
                        <configuration>
                            <systemPropertyVariables>
                                <tomee.version>${tomee.version}</tomee.version>
                            </systemPropertyVariables>
                            <systemProperties>
                                <arquillian.launch>tomee</arquillian.launch>
                                <org.apache.deltaspike.ProjectStage>UnitTest</org.apache.deltaspike.ProjectStage>
                                <cdicontainer.version>${cdicontainer.version}</cdicontainer.version>
                            </systemProperties>

                            <!-- we just use groups to mark that a test should be executed only
                            with specific environments. even though a java-ee6 application server has to be able to run
                            all tests in theory, we have to exclude some tests because there are e.g. packaging issues or
                            there are currently issues with arquillian. if a test isn't restricted to an environment,
                            no category is used for the test-class. -->
                            <excludedGroups>
                                org.apache.deltaspike.test.category.WebEE7ProfileCategory,
                                org.apache.deltaspike.test.category.SeCategory
                            </excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <!--
             * JBoss AS-7 has to be locally installed and must be started
             *
             * JBOSS_HOME must be set for this work correctly!
             *
             * Start the build with:
             * $> mvn clean install -Pjbossas-managed-7
             *
             -->
            <id>jbossas-managed-7</id>
            <properties>
                <cdicontainer.version>weld-${weld.version}</cdicontainer.version>
            </properties>

            <dependencies>
                <dependency>
                    <groupId>javax.enterprise</groupId>
                    <artifactId>cdi-api</artifactId>
                    <version>1.0-SP4</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>javax.inject</groupId>
                    <artifactId>javax.inject</artifactId>
                    <version>1</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>org.jboss.as</groupId>
                    <artifactId>jboss-as-arquillian-container-managed</artifactId>
                    <version>${jboss.as.version}</version>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.jboss.arquillian.protocol</groupId>
                    <artifactId>arquillian-protocol-servlet</artifactId>
                    <scope>test</scope>
                </dependency>

                <!-- If needed
                <dependency>
                    <groupId>org.jboss.spec</groupId>
                    <artifactId>jboss-javaee-6.0</artifactId>
                    <version>2.0.0.Final</version>
                    <type>pom</type>
                    <scope>compile</scope>
                </dependency>
                -->

            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <version>${maven.surefire.plugin.version}</version>
                        <configuration>
                            <systemProperties>
                                <arquillian.launch>jbossas-managed-7</arquillian.launch>
                                <arquillian.xml>arquillian-jboss.xml</arquillian.xml>
                                <org.apache.deltaspike.ProjectStage>UnitTest</org.apache.deltaspike.ProjectStage>
                                <cdicontainer.version>${cdicontainer.version}</cdicontainer.version>
                                <jacoco.agent>${jacoco.agent}</jacoco.agent>
                            </systemProperties>
                            <!-- we just use groups to mark that a test should be executed only
                            with specific environments. even though a java-ee6 application server has to be able to run
                            all tests in theory, we have to exclude some tests because there are e.g. packaging issues or
                            there are currently issues with arquillian. if a test isn't restricted to an environment,
                            no category is used for the test-class. -->
                            <excludedGroups>
                                org.apache.deltaspike.test.category.FullProfileCategory,
                                org.apache.deltaspike.test.category.WebEE7ProfileCategory,
                                org.apache.deltaspike.test.category.SeCategory
                            </excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <!--
             * JBoss AS-7  will be downloaded as maven dependency
             *
             * JBOSS_HOME need not be set for this.
             *
             * Start the build with:
             * $> mvn clean install -Pjbossas-build-managed-7
             *
             -->
            <id>jbossas-build-managed-7</id>

            <properties>
                <cdicontainer.version>weld-${weld.version}</cdicontainer.version>
            </properties>

            <dependencies>
                <dependency>
                    <groupId>javax.enterprise</groupId>
                    <artifactId>cdi-api</artifactId>
                    <version>1.0-SP4</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>javax.inject</groupId>
                    <artifactId>javax.inject</artifactId>
                    <version>1</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>org.jboss.as</groupId>
                    <artifactId>jboss-as-arquillian-container-managed</artifactId>
                    <version>${jboss.as.version}</version>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.jboss.arquillian.protocol</groupId>
                    <artifactId>arquillian-protocol-servlet</artifactId>
                    <scope>test</scope>
                </dependency>

            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <version>${maven.surefire.plugin.version}</version>
                        <configuration>
                            <systemProperties>
                                <arquillian.launch>jbossas-build-managed-7</arquillian.launch>
                                <arquillian.xml>arquillian-jboss.xml</arquillian.xml>
                                <arquillian.jboss_home>
                                    ${container.unpack.directory}/jboss-as-${jboss.as.version}
                                </arquillian.jboss_home>
                                <org.apache.deltaspike.ProjectStage>UnitTest</org.apache.deltaspike.ProjectStage>
                                <cdicontainer.version>${cdicontainer.version}</cdicontainer.version>
                            </systemProperties>
                            <!-- we just use groups to mark that a test should be executed only
                            with specific environments. even though a java-ee6 application server has to be able to run
                            all tests in theory, we have to exclude some tests because there are e.g. packaging issues or
                            there are currently issues with arquillian. if a test isn't restricted to an environment,
                            no category is used for the test-class. -->
                            <excludedGroups>
                                org.apache.deltaspike.test.category.FullProfileCategory,
                                org.apache.deltaspike.test.category.WebEE7ProfileCategory,
                                org.apache.deltaspike.test.category.SeCategory
                            </excludedGroups>
                        </configuration>
                    </plugin>

                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-dependency-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>unpack-as7</id>
                                <phase>process-test-classes</phase>
                                <goals>
                                    <goal>unpack</goal>
                                </goals>
                                <configuration>
                                    <artifactItems>
                                        <artifactItem>
                                            <groupId>org.jboss.as</groupId>
                                            <artifactId>jboss-as-dist</artifactId>
                                            <version>${jboss.as.version}</version>
                                            <outputDirectory>${container.unpack.directory}</outputDirectory>
                                            <type>zip</type>
                                            <overWrite>false</overWrite>
                                        </artifactItem>
                                    </artifactItems>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>


        <profile>
            <id>jbossas-remote-7</id>
            <!-- AS7 must be started manually for this work correctly - debug hints see arquillian.xml -->

            <properties>
                <cdicontainer.version>weld-${weld.version}</cdicontainer.version>
            </properties>

            <dependencies>

                <dependency>
                    <groupId>javax.enterprise</groupId>
                    <artifactId>cdi-api</artifactId>
                    <version>1.0-SP4</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>javax.inject</groupId>
                    <artifactId>javax.inject</artifactId>
                    <version>1</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>org.jboss.as</groupId>
                    <artifactId>jboss-as-arquillian-container-remote</artifactId>
                    <version>${jboss.as.version}</version>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.jboss.arquillian.protocol</groupId>
                    <artifactId>arquillian-protocol-servlet</artifactId>
                    <scope>test</scope>
                </dependency>

            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <version>${maven.surefire.plugin.version}</version>
                        <configuration>
                            <systemProperties>
                                <arquillian.launch>jbossas-remote-7</arquillian.launch>
                                <arquillian.xml>arquillian-jboss.xml</arquillian.xml>
                                <org.apache.deltaspike.ProjectStage>UnitTest</org.apache.deltaspike.ProjectStage>
                                <cdicontainer.version>${cdicontainer.version}</cdicontainer.version>
                            </systemProperties>
                            <!-- we just use groups to mark that a test should be executed only
                            with specific environments. even though a java-ee6 application server has to be able to run
                            all tests in theory, we have to exclude some tests because there are e.g. packaging issues or
                            there are currently issues with arquillian. if a test isn't restricted to an environment,
                            no category is used for the test-class. -->
                            <excludedGroups>
                                org.apache.deltaspike.test.category.FullProfileCategory,
                                org.apache.deltaspike.test.category.WebEE7ProfileCategory,
                                org.apache.deltaspike.test.category.SeCategory
                            </excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <!--
             * WildFly has to be locally installed
             *
             * JBOSS_HOME must be set for this to work correctly!
             *
             * Start the build with:
             * $> mvn clean install -Pwildfly-managed -Dweld.version=xxx
             *
             -->
            <id>wildfly-managed</id>
            <properties>
                <!-- Actual default Weld version used with this profile -->
                <weld.version>2.3.5.Final</weld.version>
                <cdicontainer.version>wildfly-${wildfly.version}</cdicontainer.version>
            </properties>

            <dependencies>
                <!--This brings in the cdi-api in correct version corresponding to Weld version specified with ${weld.version}-->
                <!--Only for build purposes, for tests, Wildfly provides that-->
                <dependency>
                    <groupId>org.jboss.weld</groupId>
                    <artifactId>weld-core-impl</artifactId>
                    <version>${weld.version}</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>javax.inject</groupId>
                    <artifactId>javax.inject</artifactId>
                    <version>1</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>org.wildfly.arquillian</groupId>
                    <artifactId>wildfly-arquillian-container-managed</artifactId>
                    <version>${wildfly.arquillian.version}</version>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.jboss.arquillian.protocol</groupId>
                    <artifactId>arquillian-protocol-servlet</artifactId>
                    <scope>test</scope>
                </dependency>

            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <version>${maven.surefire.plugin.version}</version>
                        <configuration>
                            <systemProperties>
                                <arquillian.launch>wildfly-managed</arquillian.launch>
                                <arquillian.xml>arquillian-jboss.xml</arquillian.xml>
                                <org.apache.deltaspike.ProjectStage>UnitTest</org.apache.deltaspike.ProjectStage>
                                <cdicontainer.version>${cdicontainer.version}</cdicontainer.version>
                                <jacoco.agent>${jacoco.agent}</jacoco.agent>
                            </systemProperties>
                            <!-- we just use groups to mark that a test should be executed only
                            with specific environments. even though a java-ee6 application server has to be able to run
                            all tests in theory, we have to exclude some tests because there are e.g. packaging issues or
                            there are currently issues with arquillian. if a test isn't restricted to an environment,
                            no category is used for the test-class. -->
                            <excludedGroups>
                                org.apache.deltaspike.test.category.FullProfileCategory,
                                org.apache.deltaspike.test.category.SeCategory
                            </excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <!--
             * WildFly will be downloaded as maven dependency
             *
             * JBOSS_HOME need not be set for this.
             *
             * Start the build with:
             * $> mvn clean install -Pwildfly-build-managed -Dwildfly.version=10.0.0.Final -Dweld.version=xxx
             *
             -->
            <id>wildfly-build-managed</id>

            <properties>
                <!-- Actual default Weld version used with this profile -->
                <weld.version>2.3.5.Final</weld.version>
                <cdicontainer.version>wildfly-${wildfly.version}</cdicontainer.version>
            </properties>

            <dependencies>
                <!--This brings in the cdi-api in correct version corresponding to Weld version specified with ${weld.version}-->
                <!--Only for build purposes, for tests, Wildfly provides that-->
                <dependency>
                    <groupId>org.jboss.weld</groupId>
                    <artifactId>weld-core-impl</artifactId>
                    <version>${weld.version}</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>javax.inject</groupId>
                    <artifactId>javax.inject</artifactId>
                    <version>1</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>org.wildfly.arquillian</groupId>
                    <artifactId>wildfly-arquillian-container-managed</artifactId>
                    <version>${wildfly.arquillian.version}</version>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.jboss.arquillian.protocol</groupId>
                    <artifactId>arquillian-protocol-servlet</artifactId>
                    <scope>test</scope>
                </dependency>
            </dependencies>

            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <version>${maven.surefire.plugin.version}</version>
                        <configuration>
                            <systemProperties>
                                <arquillian.launch>wildfly-build-managed</arquillian.launch>
                                <arquillian.xml>arquillian-jboss.xml</arquillian.xml>
                                <arquillian.jboss_home>
                                    ${container.unpack.directory}/wildfly-${wildfly.version}
                                </arquillian.jboss_home>
                                <org.apache.deltaspike.ProjectStage>UnitTest</org.apache.deltaspike.ProjectStage>
                                <cdicontainer.version>${cdicontainer.version}</cdicontainer.version>
                            </systemProperties>
                            <!-- we just use groups to mark that a test should be executed only
                            with specific environments. even though a java-ee6 application server has to be able to run
                            all tests in theory, we have to exclude some tests because there are e.g. packaging issues or
                            there are currently issues with arquillian. if a test isn't restricted to an environment,
                            no category is used for the test-class. -->
                            <excludedGroups>
                                org.apache.deltaspike.test.category.FullProfileCategory,
                                org.apache.deltaspike.test.category.SeCategory
                            </excludedGroups>
                        </configuration>
                    </plugin>

                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-dependency-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>unpack-wf</id>
                                <phase>process-test-classes</phase>
                                <goals>
                                    <goal>unpack</goal>
                                </goals>
                                <configuration>
                                    <artifactItems>
                                        <artifactItem>
                                            <groupId>org.wildfly</groupId>
                                            <artifactId>wildfly-dist</artifactId>
                                            <version>${wildfly.version}</version>
                                            <outputDirectory>${container.unpack.directory}</outputDirectory>
                                            <type>zip</type>
                                            <overWrite>false</overWrite>
                                        </artifactItem>
                                    </artifactItems>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>wildfly-remote</id>
            <!-- Wildfly must be started manually for this work correctly - for debug hints see arquillian-jboss.xml -->

            <properties>
                <cdicontainer.version>wildfly-${wildfly.version}</cdicontainer.version>
            </properties>

            <dependencies>

                <dependency>
                    <groupId>javax.enterprise</groupId>
                    <artifactId>cdi-api</artifactId>
                    <version>1.1</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>javax.inject</groupId>
                    <artifactId>javax.inject</artifactId>
                    <version>1</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>org.wildfly.arquillian</groupId>
                    <artifactId>wildfly-arquillian-container-remote</artifactId>
                    <version>${wildfly.arquillian.version}</version>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.jboss.arquillian.protocol</groupId>
                    <artifactId>arquillian-protocol-servlet</artifactId>
                    <scope>test</scope>
                </dependency>

            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <version>${maven.surefire.plugin.version}</version>
                        <configuration>
                            <systemProperties>
                                <arquillian.launch>wildfly-remote</arquillian.launch>
                                <arquillian.xml>arquillian-jboss.xml</arquillian.xml>
                                <org.apache.deltaspike.ProjectStage>UnitTest</org.apache.deltaspike.ProjectStage>
                                <cdicontainer.version>${cdicontainer.version}</cdicontainer.version>
                            </systemProperties>
                            <!-- we just use groups to mark that a test should be executed only
                            with specific environments. even though a java-ee6 application server has to be able to run
                            all tests in theory, we have to exclude some tests because there are e.g. packaging issues or
                            there are currently issues with arquillian. if a test isn't restricted to an environment,
                            no category is used for the test-class. -->
                            <excludedGroups>
                                org.apache.deltaspike.test.category.FullProfileCategory,
                                org.apache.deltaspike.test.category.SeCategory
                            </excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>glassfish-remote-3.1</id>

            <properties>
                <cdicontainer.version>weld-${weld.version}</cdicontainer.version>
            </properties>

            <dependencies>
                <dependency>
                    <groupId>javax.enterprise</groupId>
                    <artifactId>cdi-api</artifactId>
                    <version>1.0-SP4</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>javax.inject</groupId>
                    <artifactId>javax.inject</artifactId>
                    <version>1</version>
                    <scope>provided</scope>
                </dependency>

                <dependency>
                    <groupId>org.jboss.arquillian.container</groupId>
                    <artifactId>arquillian-glassfish-remote-3.1</artifactId>
                    <version>1.0.0.CR4</version>
                    <scope>test</scope>
                </dependency>

                <!-- If needed
                <dependency>
                    <groupId>org.jboss.spec</groupId>
                    <artifactId>jboss-javaee-6.0</artifactId>
                    <version>2.0.0.Final</version>
                    <type>pom</type>
                    <scope>compile</scope>
                </dependency>
                -->

            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <version>${maven.surefire.plugin.version}</version>
                        <configuration>
                            <systemProperties>
                                <arquillian.launch>glassfish-remote-3.1</arquillian.launch>
                                <org.apache.deltaspike.ProjectStage>UnitTest</org.apache.deltaspike.ProjectStage>
                                <cdicontainer.version>${cdicontainer.version}</cdicontainer.version>
                            </systemProperties>
                            <!-- we just use groups to mark that a test should be executed only
                            with specific environments. even though a java-ee6 application server has to be able to run
                            all tests in theory, we have to exclude some tests because there are e.g. packaging issues or
                            there are currently issues with arquillian. if a test isn't restricted to an environment,
                            no category is used for the test-class. -->
                            <excludedGroups>
                                org.apache.deltaspike.test.category.WebEE7ProfileCategory,
                                org.apache.deltaspike.test.category.SeCategory
                            </excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>


        <profile>
            <id>wls-remote-12c</id>

            <properties>
                <cdicontainer.version>wls-${wls.version}</cdicontainer.version>
            </properties>

            <dependencies>

                <dependency>
                    <groupId>javax.enterprise</groupId>
                    <artifactId>cdi-api</artifactId>
                    <version>1.0-SP4</version>
                    <scope>provided</scope>
                </dependency>

                <dependency>
                    <groupId>javax</groupId>
                    <artifactId>javaee-api</artifactId>
                    <version>7.0</version>
                    <scope>provided</scope>
                </dependency>

                <dependency>
                    <groupId>org.jboss.arquillian.container</groupId>
                    <artifactId>arquillian-wls-remote-12.1</artifactId>
                    <version>1.0.0.Alpha2</version>
                    <scope>test</scope>
                </dependency>

            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <version>${maven.surefire.plugin.version}</version>
                        <configuration>
                            <!-- until DELTASPIKE-996 is resolved -->
                            <excludes>
                                <exclude>**/BaseTestConfigProperty.java</exclude>
                                <exclude>**/ConfigPropertyWARTest.java</exclude>
                                <exclude>**/ConfigPropertyEARTest.java</exclude>
                            </excludes>
                            <systemProperties>
                                <arquillian.launch>wls-remote-12c</arquillian.launch>
                                <org.apache.deltaspike.ProjectStage>UnitTest</org.apache.deltaspike.ProjectStage>
                                <cdicontainer.version>${cdicontainer.version}</cdicontainer.version>
                            </systemProperties>
                            <systemPropertyVariables>
                                <WLS_HOME>${env.WLS_HOME}</WLS_HOME>
                            </systemPropertyVariables>
                            <!-- we just use groups to mark that a test should be executed only
                     with specific environments. even though a java-ee6 application server has to be able to run
                     all tests in theory, we have to exclude some tests because there are e.g. packaging issues or
                     there are currently issues with arquillian. if a test isn't restricted to an environment,
                     no category is used for the test-class. -->
                            <excludedGroups>
                                org.apache.deltaspike.test.category.FullProfileCategory,
                                org.apache.deltaspike.test.category.WebEE7ProfileCategory,
                                org.apache.deltaspike.test.category.SeCategory
                            </excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>

        </profile>

        <profile>
            <id>wls-managed-12c</id>

            <properties>
                <cdicontainer.version>wls-${wls.version}</cdicontainer.version>
            </properties>

            <dependencies>

                <dependency>
                    <groupId>javax.enterprise</groupId>
                    <artifactId>cdi-api</artifactId>
                    <version>1.0-SP4</version>
                    <scope>provided</scope>
                </dependency>

                <dependency>
                    <groupId>javax</groupId>
                    <artifactId>javaee-api</artifactId>
                    <version>7.0</version>
                    <scope>provided</scope>
                </dependency>

                <dependency>
                    <groupId>org.jboss.arquillian.container</groupId>
                    <artifactId>arquillian-wls-managed-12.1</artifactId>
                    <version>1.0.0.Alpha3</version>
                    <scope>test</scope>
                </dependency>

            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <version>${maven.surefire.plugin.version}</version>
                        <configuration>
                            <!-- until DELTASPIKE-996 is resolved -->
                            <excludes>
                                <exclude>**/BaseTestConfigProperty.java</exclude>
                                <exclude>**/ConfigPropertyWARTest.java</exclude>
                                <exclude>**/ConfigPropertyEARTest.java</exclude>
                            </excludes>
                            <systemProperties>
                                <arquillian.launch>wls-managed-12c</arquillian.launch>
                                <org.apache.deltaspike.ProjectStage>UnitTest</org.apache.deltaspike.ProjectStage>
                                <cdicontainer.version>${cdicontainer.version}</cdicontainer.version>
                            </systemProperties>
                            <systemPropertyVariables>
                                <!--
                                installation directory of wls - root of folders like wlserver,...
                                e.g.: export MW_HOME=/servers/weblogic/Oracle_Home
                                -->
                                <MW_HOME>${env.MW_HOME}</MW_HOME>
                                <!--
                                domain used to run ds-tests - root of folders like servers,...
                                e.g.: export DS_DOMAIN_DIR=/deltaspike/deltaspike-1.5.0/mytest
                                -->
                                <DS_DOMAIN_DIR>${env.DS_DOMAIN_DIR}</DS_DOMAIN_DIR>
                                <!-- e.g.: export DS_DOMAIN_TARGET=myserver -->
                                <DS_DOMAIN_TARGET>${env.DS_DOMAIN_TARGET}</DS_DOMAIN_TARGET>
                                <!-- e.g.: export DS_ADMIN_URL=t3://localhost:7001 -->
                                <DS_ADMIN_URL>${env.DS_ADMIN_URL}</DS_ADMIN_URL>
                                <!-- e.g.: export DS_ADMIN_USER=weblogic -->
                                <DS_ADMIN_USER>${env.DS_ADMIN_USER}</DS_ADMIN_USER>
                                <!-- e.g.: export DS_ADMIN_PSWD=weblogic1-->
                                <DS_ADMIN_PSWD>${env.DS_ADMIN_PSWD}</DS_ADMIN_PSWD>
                            </systemPropertyVariables>

                            <!-- we just use groups to mark that a test should be executed only
                            with specific environments. even though a java-ee6 application server has to be able to run
                            all tests in theory, we have to exclude some tests because there are e.g. packaging issues or
                            there are currently issues with arquillian. if a test isn't restricted to an environment,
                            no category is used for the test-class. -->
                            <excludedGroups>
                                org.apache.deltaspike.test.category.SeCategory
                            </excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <!--
             * Glassfish will be downloaded as maven dependency
             *
             * Start the build with:
             * $> mvn clean install -Pglassfish-build-managed-3
             *
             -->
            <id>glassfish-build-managed-3</id>

            <properties>
                <cdicontainer.version>glassfish-${glassfish3.version}</cdicontainer.version>
            </properties>

            <dependencies>
                <dependency>
                    <groupId>javax.enterprise</groupId>
                    <artifactId>cdi-api</artifactId>
                    <version>1.0-SP4</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>javax.inject</groupId>
                    <artifactId>javax.inject</artifactId>
                    <version>1</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>org.jboss.arquillian.container</groupId>
                    <artifactId>arquillian-glassfish-managed-3.1</artifactId>
                    <version>1.0.0.CR4</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>

            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <systemProperties>
                                <arquillian.launch>glassfish-build-managed-3</arquillian.launch>
                                <arquillian.glassfish3_home>${container.unpack.directory}/glassfish3</arquillian.glassfish3_home>
                                <org.apache.deltaspike.ProjectStage>UnitTest</org.apache.deltaspike.ProjectStage>
                                <cdicontainer.version>${cdicontainer.version}</cdicontainer.version>
                            </systemProperties>
                            <!-- we just use groups to mark that a test should be executed only
                            with specific environments. even though a java-ee6 application server has to be able to run
                            all tests in theory, we have to exclude some tests because there are e.g. packaging issues or
                            there are currently issues with arquillian. if a test isn't restricted to an environment,
                            no category is used for the test-class. -->
                            <excludedGroups>
                                org.apache.deltaspike.test.category.WebEE7ProfileCategory,
                                org.apache.deltaspike.test.category.SeCategory
                            </excludedGroups>
                        </configuration>
                    </plugin>

                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-dependency-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>unpack-glassfish3</id>
                                <phase>generate-test-resources</phase>
                                <goals>
                                    <goal>unpack</goal>
                                </goals>
                                <configuration>
                                    <artifactItems>
                                        <artifactItem>
                                            <groupId>org.glassfish.main.distributions</groupId>
                                            <artifactId>glassfish</artifactId>
                                            <version>${glassfish3.version}</version>
                                            <outputDirectory>${container.unpack.directory}</outputDirectory>
                                            <type>zip</type>
                                            <overWrite>false</overWrite>
                                        </artifactItem>
                                    </artifactItems>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>

                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>prepare-glassfish3</id>
                                <phase>process-test-resources</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <target>

                                        <!-- Change all TCP ports from "xxxx" to "3xxxx" -->
                                        <replaceregexp file="${container.unpack.directory}/glassfish3/glassfish/domains/domain1/config/domain.xml" match="port=&quot;(\d{4})&quot;" replace="port=&quot;3\1&quot;" flags="g" />

                                        <!-- Replace the default datasource with an in-memory one -->
                                        <replace file="${container.unpack.directory}/glassfish3/glassfish/domains/domain1/config/domain.xml" token="datasource-classname=&quot;org.apache.derby.jdbc.ClientDataSource&quot;" value="datasource-classname=&quot;org.apache.derby.jdbc.EmbeddedDataSource&quot;" />
                                        <replace file="${container.unpack.directory}/glassfish3/glassfish/domains/domain1/config/domain.xml" token="value=&quot;sun-appserv-samples&quot;" value="value=&quot;memory:deltaspike&quot;" />

                                    </target>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <!--
             * Glassfish will be downloaded as maven dependency
             *
             * Start the build with:
             * $> mvn clean install -Pglassfish-build-managed-4
             *
             -->
            <id>glassfish-build-managed-4</id>

            <properties>
                <cdicontainer.version>glassfish-${glassfish4.version}</cdicontainer.version>
            </properties>

            <dependencies>
                <dependency>
                    <groupId>javax.enterprise</groupId>
                    <artifactId>cdi-api</artifactId>
                    <version>1.0-SP4</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>javax.inject</groupId>
                    <artifactId>javax.inject</artifactId>
                    <version>1</version>
                    <scope>provided</scope>
                </dependency>
                <!-- Also works fine with Glassfish 4.0 -->
                <dependency>
                    <groupId>org.jboss.arquillian.container</groupId>
                    <artifactId>arquillian-glassfish-managed-3.1</artifactId>
                    <version>1.0.0.CR4</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>

            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <systemProperties>
                                <arquillian.launch>glassfish-build-managed-4</arquillian.launch>
                                <arquillian.glassfish4_home>${container.unpack.directory}/glassfish4</arquillian.glassfish4_home>
                                <org.apache.deltaspike.ProjectStage>UnitTest</org.apache.deltaspike.ProjectStage>
                                <cdicontainer.version>${cdicontainer.version}</cdicontainer.version>
                            </systemProperties>
                            <!-- we just use groups to mark that a test should be executed only
                            with specific environments. even though a java-ee6 application server has to be able to run
                            all tests in theory, we have to exclude some tests because there are e.g. packaging issues or
                            there are currently issues with arquillian. if a test isn't restricted to an environment,
                            no category is used for the test-class. -->
                            <excludedGroups>
                                org.apache.deltaspike.test.category.SeCategory
                            </excludedGroups>
                        </configuration>
                    </plugin>

                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-dependency-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>unpack-glassfish4</id>
                                <phase>generate-test-resources</phase>
                                <goals>
                                    <goal>unpack</goal>
                                </goals>
                                <configuration>
                                    <artifactItems>
                                        <artifactItem>
                                            <groupId>org.glassfish.main.distributions</groupId>
                                            <artifactId>glassfish</artifactId>
                                            <version>${glassfish4.version}</version>
                                            <outputDirectory>${container.unpack.directory}</outputDirectory>
                                            <type>zip</type>
                                            <overWrite>false</overWrite>
                                        </artifactItem>
                                    </artifactItems>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>

                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>prepare-glassfish4</id>
                                <phase>process-test-resources</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <target>

                                        <!-- Change all TCP ports from "xxxx" to "2xxxx" -->
                                        <replaceregexp file="${container.unpack.directory}/glassfish4/glassfish/domains/domain1/config/domain.xml" match="port=&quot;(\d{4})&quot;" replace="port=&quot;2\1&quot;" flags="g" />
                                        <replace file="${container.unpack.directory}/glassfish4/glassfish/domains/domain1/config/domain.xml" token="value=&quot;7676&quot;" value="value=&quot;27676&quot;" />

                                        <!-- Replace the default datasource with an in-memory one -->
                                        <replace file="${container.unpack.directory}/glassfish4/glassfish/domains/domain1/config/domain.xml" token="datasource-classname=&quot;org.apache.derby.jdbc.ClientDataSource&quot;" value="datasource-classname=&quot;org.apache.derby.jdbc.EmbeddedDataSource&quot;" />
                                        <replace file="${container.unpack.directory}/glassfish4/glassfish/domains/domain1/config/domain.xml" token="value=&quot;sun-appserv-samples&quot;" value="value=&quot;memory:deltaspike&quot;" />

                                    </target>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>payara-embedded-4</id>

            <properties>
                <cdicontainer.version>payara-${payara.version}</cdicontainer.version>
            </properties>

            <dependencies>
                <dependency>
                    <groupId>javax.enterprise</groupId>
                    <artifactId>cdi-api</artifactId>
                    <version>1.2</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>javax.inject</groupId>
                    <artifactId>javax.inject</artifactId>
                    <version>1</version>
                    <scope>provided</scope>
                </dependency>

                <dependency>
                    <groupId>fish.payara.extras</groupId>
                    <artifactId>payara-embedded-all</artifactId>
                    <version>${payara.version}</version>
                    <scope>test</scope>
                </dependency>

                <dependency>
                    <groupId>org.jboss.arquillian.container</groupId>
                    <artifactId>arquillian-glassfish-embedded-3.1</artifactId>
                    <version>1.0.0.CR4</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <systemProperties>
                                <arquillian.launch>glassfish-build-managed-4</arquillian.launch>
                                <org.apache.deltaspike.ProjectStage>UnitTest</org.apache.deltaspike.ProjectStage>
                                <cdicontainer.version>${cdicontainer.version}</cdicontainer.version>
                            </systemProperties>
                            <!-- we just use groups to mark that a test should be executed only
                            with specific environments. even though a java-ee6 application server has to be able to run
                            all tests in theory, we have to exclude some tests because there are e.g. packaging issues or
                            there are currently issues with arquillian. if a test isn't restricted to an environment,
                            no category is used for the test-class. -->
                            <excludedGroups>
                                org.apache.deltaspike.test.category.SeCategory
                            </excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <!--
             * Payara will be downloaded as maven dependency
             *
             * Start the build with:
             * $> mvn clean install -Ppayara-build-managed-4
             *
             -->
            <id>payara-build-managed-4</id>

            <properties>
                <cdicontainer.version>payara-${payara.version}</cdicontainer.version>
            </properties>

            <dependencies>
                <dependency>
                    <groupId>javax.enterprise</groupId>
                    <artifactId>cdi-api</artifactId>
                    <version>1.2</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>javax.inject</groupId>
                    <artifactId>javax.inject</artifactId>
                    <version>1</version>
                    <scope>provided</scope>
                </dependency>
                <!-- Also works fine with Payara -->
                <dependency>
                    <groupId>org.jboss.arquillian.container</groupId>
                    <artifactId>arquillian-glassfish-managed-3.1</artifactId>
                    <version>1.0.0.CR4</version>
                    <scope>test</scope>
                </dependency>
            </dependencies>

            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <systemProperties>
                                <arquillian.launch>glassfish-build-managed-4</arquillian.launch>
                                <arquillian.glassfish4_home>${container.unpack.directory}/payara41</arquillian.glassfish4_home>
                                <org.apache.deltaspike.ProjectStage>UnitTest</org.apache.deltaspike.ProjectStage>
                                <cdicontainer.version>${cdicontainer.version}</cdicontainer.version>
                            </systemProperties>
                            <!-- we just use groups to mark that a test should be executed only
                            with specific environments. even though a java-ee6 application server has to be able to run
                            all tests in theory, we have to exclude some tests because there are e.g. packaging issues or
                            there are currently issues with arquillian. if a test isn't restricted to an environment,
                            no category is used for the test-class. -->
                            <excludedGroups>
                                org.apache.deltaspike.test.category.SeCategory
                            </excludedGroups>
                        </configuration>
                    </plugin>

                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-dependency-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>unpack-glassfish4</id>
                                <phase>generate-test-resources</phase>
                                <goals>
                                    <goal>unpack</goal>
                                </goals>
                                <configuration>
                                    <artifactItems>
                                        <artifactItem>
                                            <groupId>fish.payara.distributions</groupId>
                                            <artifactId>payara</artifactId>
                                            <version>${payara.version}</version>
                                            <outputDirectory>${container.unpack.directory}</outputDirectory>
                                            <type>zip</type>
                                            <overWrite>false</overWrite>
                                        </artifactItem>
                                    </artifactItems>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>

                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>prepare-glassfish4</id>
                                <phase>process-test-resources</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <target>

                                        <!-- Change all TCP ports from "xxxx" to "2xxxx" -->
                                        <replaceregexp file="${container.unpack.directory}/payara41/glassfish/domains/domain1/config/domain.xml" match="port=&quot;(\d{4})&quot;" replace="port=&quot;2\1&quot;" flags="g" />
                                        <replace file="${container.unpack.directory}/payara41/glassfish/domains/domain1/config/domain.xml" token="value=&quot;7676&quot;" value="value=&quot;27676&quot;" />

                                        <!-- Replace the default datasource with an in-memory one -->
                                        <replace file="${container.unpack.directory}/payara41/glassfish/domains/domain1/config/domain.xml" token="datasource-classname=&quot;org.apache.derby.jdbc.ClientDataSource&quot;" value="datasource-classname=&quot;org.apache.derby.jdbc.EmbeddedDataSource&quot;" />
                                        <replace file="${container.unpack.directory}/payara41/glassfish/domains/domain1/config/domain.xml" token="value=&quot;sun-appserv-samples&quot;" value="value=&quot;memory:deltaspike&quot;" />

                                    </target>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

    </profiles>

</project>
