<?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.9.5-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>
        <version.jaxb-api>2.3.1</version.jaxb-api>
        <version.jaxb>2.3.0.1</version.jaxb>
        <version.activation>1.1.1</version.activation>
        <version.annotation>1.3.2</version.annotation>
        <bval.artifactId>bval-jsr303</bval.artifactId>
        <validation.artifactId>geronimo-validation_1.0_spec</validation.artifactId>
        <jboss.as.version>7.1.1.Final</jboss.as.version>
        <wildfly.version>10.1.0.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.2.181</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>
        
        <!-- Preparation for Java 9+, include a dependency on the JAXB APIs -->
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>${version.jaxb-api}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
            <version>${version.jaxb}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>${version.jaxb}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.annotation</groupId>
            <artifactId>javax.annotation-api</artifactId>
            <version>${version.annotation}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>${version.activation}</version>
            <scope>provided</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>
            <id>Java9+</id>
            <activation>
                <jdk>[1.9,)</jdk>
            </activation>
            <properties>
                <!-- Need newer implementations to be able to run on Java9+ -->
                <bval.artifactId>bval-jsr</bval.artifactId>
                <validation.artifactId>geronimo-validation_1.1_spec</validation.artifactId>
                <hibernate.validator.version>6.0.17.Final</hibernate.validator.version>
            </properties>
        </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.geronimo.specs</groupId>
                    <artifactId>${validation.artifactId}</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.apache.bval</groupId>
                    <artifactId>${bval.artifactId}</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>
                <owb.version>1.7.5</owb.version>
                <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>
                    <!--
                        quite a hack! the 1.7.5 does a bit too much with resource isolation
                        Glad the 2.x version is still compatible and has all fixed.
                        But eventually we should go back to the matching version.
                        <version>${owb.version}</version>
                    -->
                    <version>2.0.5</version>
                    <scope>test</scope>
                </dependency>

                <dependency>
                    <groupId>org.apache.geronimo.specs</groupId>
                    <artifactId>${validation.artifactId}</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.apache.bval</groupId>
                    <artifactId>${bval.artifactId}</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.11</owb.version>
                <cdicontainer.version>owb-${owb.version}</cdicontainer.version>
            </properties>

            <repositories>
                <repository>
                    <id>apache-snapshot-repository</id>
                    <url>https://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.geronimo.specs</groupId>
                    <artifactId>${validation.artifactId}</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.apache.bval</groupId>
                    <artifactId>${bval.artifactId}</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.1.3.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.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>
                <dependency>
                    <groupId>org.jboss.weld</groupId>
                    <artifactId>weld-spi</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 -Ptomee8-build-managed -Dtest=UnitTestName -Dopenejb.server.debug=true
             * then use remote debuggig at port 5005
             *
            -->
            <id>tomee8-build-managed</id>

            <properties>
                <tomee.version>8.0.0</tomee.version>
                <openejb.version>${tomee.version}</openejb.version>
                <owb.version>2.0.5</owb.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>
            <!--
             * 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.6</tomee.version>
                <openejb.version>${tomee.version}</openejb.version>
                <owb.version>2.0.5</owb.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>fish.payara.arquillian</groupId>
                    <artifactId>arquillian-payara-server-4-managed</artifactId>
                    <version>1.1</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>
