<?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>0.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>
        <jboss.as.version>7.1.1.Final</jboss.as.version>
        <wildfly.version>8.0.0.Alpha4</wildfly.version>
    </properties>


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

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

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

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


    <profiles>

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

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


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

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

            <properties>
                <cdicontainer.version>owb-${owb.version}</cdicontainer.version>
            </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.FullProfileCategory
                            </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>1.2.0</version>
                    <scope>test</scope>
                </dependency>

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

        <profile>
            <!-- use this profile to compile and test DeltaSpike with JBoss Weld -->
            <id>Weld</id>

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


            <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.FullProfileCategory
                            </excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>

            <dependencyManagement>
                <dependencies><!-- org.jboss.weld -->
                    <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>javax.enterprise</groupId>
                    <artifactId>cdi-api</artifactId>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>org.jboss.weld</groupId>
                    <artifactId>weld-api</artifactId>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>org.jboss.weld</groupId>
                    <artifactId>weld-core</artifactId>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>javax.el</groupId>
                    <artifactId>el-api</artifactId>
                    <version>2.2</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.jboss.spec.javax.ejb</groupId>
                    <artifactId>jboss-ejb-api_3.1_spec</artifactId>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>javax.validation</groupId>
                    <artifactId>validation-api</artifactId>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>javax.persistence</groupId>
                    <artifactId>persistence-api</artifactId>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>javassist</groupId>
                    <artifactId>javassist</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>
                    <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>
        </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>tomee-embedded</artifactId>
                    <version>${tomee.version}</version>
                </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.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>
                                <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>
            <!--
             * JBoss AS-7  will be downloaded as maven dependency
             *
             * JBOSS_HOME must be set for this work correctly!
             *
             * 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.jboss_home>
                                    ${project.build.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.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>${project.build.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>
                                <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>
            <!--
             * WildFly 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 -Pwildfly-managed
             *
             -->
            <id>wildfly-managed</id>
            <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</groupId>
                    <artifactId>wildfly-arquillian-container-managed</artifactId>
                    <version>${wildfly.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-managed-7</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.FullProfileCategory,
                                org.apache.deltaspike.test.category.SeCategory
                            </excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>wildfly-remote</id>
            <!-- AS7 must be started manually for this work correctly - debug hints see arquillian.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</groupId>
                    <artifactId>wildfly-arquillian-container-remote</artifactId>
                    <version>${wildfly.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>
                                <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.CR2</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.SeCategory
                            </excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>


        <profile>
            <id>wls-remote-12c</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>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>
                            <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.SeCategory
                            </excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>

        </profile>



    </profiles>

</project>
