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

	<artifactId>wicket-arquillian-testing</artifactId>
	<packaging>war</packaging>

	<name>Wicket Arquillian Testing</name>

	<description>
        A sample JAVA EE 6 project demonstrating how to use Arquillian with Wicket Framework deployed on JBoss WildFly managed downloaded from maven repository (NEXUS for example) and unpacked with dependency plugin.
        WAR version (everything in a single .war file).
    </description>

	<properties>
		<!-- port configuration -->
		<wicket.arquillian.server.port>18788</wicket.arquillian.server.port>
		<java.debug.wire.protocol.port>48788</java.debug.wire.protocol.port>
		<wicket.arquillian.management.port>11092</wicket.arquillian.management.port>
		<!-- end port configuration -->

		<arquillian.version>1.1.12.Final</arquillian.version>
		<maven.dependency.plugin.version>2.10</maven.dependency.plugin.version>
		<maven.surefire.plugin.version>2.18.1</maven.surefire.plugin.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<wildfly.version>8.2.1.Final</wildfly.version>
		<version.wildfly.maven.plugin>1.0.2.Final</version.wildfly.maven.plugin>
		<jee.spec.version>1.0.4.Final</jee.spec.version>
	</properties>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.jboss.spec</groupId>
				<artifactId>jboss-javaee-7.0</artifactId>
				<version>${jee.spec.version}</version>
				<type>pom</type>
				<scope>provided</scope>
			</dependency>
			<dependency>
				<groupId>org.wildfly</groupId>
				<artifactId>wildfly-arquillian-container-embedded</artifactId>
				<version>${wildfly.version}</version>
				<exclusions>
					<exclusion>
					    <groupId>sun.jdk</groupId>
					    <artifactId>jconsole</artifactId>
					</exclusion>
				</exclusions>
			</dependency>
			<dependency>
				<groupId>org.wildfly</groupId>
				<artifactId>wildfly-embedded</artifactId>
				<version>${wildfly.version}</version>
				<exclusions>
					<exclusion>
					    <groupId>sun.jdk</groupId>
					    <artifactId>jconsole</artifactId>
					</exclusion>
				</exclusions>
			</dependency>
			<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.jboss.spec</groupId>
			<artifactId>jboss-javaee-7.0</artifactId>
			<type>pom</type>
		</dependency>
		<!-- Wicket CDI integration. -->
		<dependency>
			<groupId>org.apache.wicket</groupId>
			<artifactId>wicket-cdi</artifactId>
		</dependency>

		<!-- Wicket -->
		<dependency>
			<groupId>org.apache.wicket</groupId>
			<artifactId>wicket-core</artifactId>
		</dependency>
		
		<dependency>
			<groupId>org.jboss.shrinkwrap.resolver</groupId>
			<artifactId>shrinkwrap-resolver-impl-maven</artifactId>
		</dependency>
		<dependency>
			<groupId>org.jboss.shrinkwrap.resolver</groupId>
			<artifactId>shrinkwrap-resolver-spi</artifactId>
		</dependency>
		<dependency>
			<groupId>org.wildfly</groupId>
			<artifactId>wildfly-arquillian-container-embedded</artifactId>
		</dependency>

		<dependency>
			<groupId>org.wildfly</groupId>
			<artifactId>wildfly-embedded</artifactId>
		</dependency>

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
		</dependency>

		<dependency>
			<groupId>org.jboss.arquillian.junit</groupId>
			<artifactId>arquillian-junit-container</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<resources>
			 <resource>
				<directory>src/main/resources</directory>
				<filtering>true</filtering>
			</resource>
		</resources>
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-enforcer-plugin</artifactId>
					<configuration>
						<skip>true</skip>
					</configuration>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-dependency-plugin</artifactId>
					<version>${maven.dependency.plugin.version}</version>
					<executions>
						<execution>
							<id>unpack</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>
										<type>zip</type>
										<overWrite>false</overWrite>
										<outputDirectory>${project.build.directory}</outputDirectory>
									</artifactItem>
								</artifactItems>
							</configuration>
						</execution>
					</executions>
				</plugin>

				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-surefire-plugin</artifactId>
					<version>${maven.surefire.plugin.version}</version>
					<configuration>
						<argLine>-Xms128m -Xmx512m -XX:MaxPermSize=128m</argLine>
						<systemPropertyVariables>
							<!-- <jboss.socket.binding.port-offset>1100</jboss.socket.binding.port-offset> -->
							<jboss.management.http.port>${wicket.arquillian.management.port}</jboss.management.http.port>
							<jboss.http.port>${wicket.arquillian.server.port}</jboss.http.port>
							<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
							<jboss.home>${project.build.directory}/wildfly-${wildfly.version}</jboss.home>
							<module.path>${project.build.directory}/wildfly-${wildfly.version}/modules</module.path>
						</systemPropertyVariables>
						<redirectTestOutputToFile>false</redirectTestOutputToFile>
					</configuration>
				</plugin>
				<plugin>
					<groupId>org.wildfly.plugins</groupId>
					<artifactId>wildfly-maven-plugin</artifactId>
					<version>${version.wildfly.maven.plugin}</version>
					<configuration>
						<port>${wicket.arquillian.management.port}</port>
						<filename>target/${project.build.finalName}.war</filename>
					</configuration>
				</plugin>

			</plugins>
		</pluginManagement>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.wildfly.plugins</groupId>
				<artifactId>wildfly-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

