<?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.2-SNAPSHOT</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 [1.5,2.0) -->
            <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>${geronimo-annotation_1.2_spec.version}</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>

        <profile>
            <!-- use this profile to compile and test DeltaSpike with Apache OpenWebBeans [2.0,..) -->
            <id>OWB2</id>

            <properties>
                <owb.version>2.0.0-SNAPSHOT</owb.version>
                <cdicontainer.version>owb-${owb.version}</cdicontainer.version>
                <java.version>1.8</java.version>
            </properties>

            <repositories>
                <repository>
                    <id>apache-snapshot-repository</id>
                    <url>http://repository.apache.org/snapshots/</url>
                    <releases>
                        <enabled>false</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>

            <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-annotation_1.3_spec</artifactId>
                    <version>${geronimo-jcdi-2.0-spec.version}</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.geronimo.specs</groupId>
                    <artifactId>geronimo-jcdi_2.0_spec</artifactId>
                    <version>${geronimo-jcdi-2.0-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-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.Final</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>
