<?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/xsd/maven-4.0.0.xsd">
	<parent>
        <groupId>org.apache.shiro.samples</groupId>
        <artifactId>shiro-samples</artifactId>
		<version>2.alpha.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
	</parent>

	<modelVersion>4.0.0</modelVersion>
	<artifactId>samples-guice</artifactId>
	<name>Apache Shiro :: Samples :: Guice Web</name>
	<packaging>war</packaging>

	<build>
	    <plugins>
	        <plugin>
	            <artifactId>maven-surefire-plugin</artifactId>
	            <configuration>
	                <forkMode>never</forkMode>
	                <useSystemClassLoader>false</useSystemClassLoader>
	            </configuration>
	        </plugin>
	        <plugin>
	            <groupId>org.mortbay.jetty</groupId>
	            <artifactId>maven-jetty-plugin</artifactId>
	            <version>${jetty.version}</version>
	            <configuration>
	                <contextPath>/</contextPath>
	                <connectors>
	                    <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
	                        <port>9080</port>
	                        <maxIdleTime>60000</maxIdleTime>
	                    </connector>
	                </connectors>
	                <requestLog implementation="org.mortbay.jetty.NCSARequestLog">
	                    <filename>./target/yyyy_mm_dd.request.log</filename>
	                    <retainDays>90</retainDays>
	                    <append>true</append>
	                    <extended>false</extended>
	                    <logTimeZone>GMT</logTimeZone>
	                </requestLog>
	            </configuration>
	        </plugin>
	    </plugins>
	</build>

	<dependencies>
	    <dependency>
	        <groupId>javax.servlet</groupId>
	        <artifactId>jstl</artifactId>
	    </dependency>
	    <dependency>
	        <groupId>javax.servlet</groupId>
	        <artifactId>servlet-api</artifactId>
	        <scope>provided</scope>
	    </dependency>
	    <dependency>
	        <groupId>org.slf4j</groupId>
	        <artifactId>slf4j-log4j12</artifactId>
	        <scope>runtime</scope>
	    </dependency>
	    <dependency>
	        <groupId>log4j</groupId>
	        <artifactId>log4j</artifactId>
	        <scope>runtime</scope>
	    </dependency>
	    <dependency>
	        <groupId>net.sourceforge.htmlunit</groupId>
	        <artifactId>htmlunit</artifactId>
	        <version>2.6</version>
	        <scope>test</scope>
	    </dependency>
	    <dependency>
	        <groupId>org.apache.shiro</groupId>
	        <artifactId>shiro-core</artifactId>
	    </dependency>
	    <dependency>
	        <groupId>org.apache.shiro</groupId>
	        <artifactId>shiro-web</artifactId>
	    </dependency>
		<dependency>
		    <groupId>org.apache.shiro</groupId>
		    <artifactId>shiro-guice</artifactId>
		</dependency>
		<dependency>
			<groupId>com.google.inject.extensions</groupId>
			<artifactId>guice-servlet</artifactId>
		</dependency>
	    <dependency>
	        <groupId>org.mortbay.jetty</groupId>
	        <artifactId>jetty</artifactId>
	        <version>${jetty.version}</version>
	        <scope>test</scope>
	    </dependency>
	    <dependency>
	        <groupId>org.mortbay.jetty</groupId>
	        <artifactId>jsp-2.1-jetty</artifactId>
	        <version>${jetty.version}</version>
	        <scope>test</scope>
	    </dependency>
	    <dependency>
	        <groupId>taglibs</groupId>
	        <artifactId>standard</artifactId>
	    </dependency>
	    <dependency>
	        <groupId>org.slf4j</groupId>
	        <artifactId>jcl-over-slf4j</artifactId>
	        <scope>runtime</scope>
	    </dependency>
	</dependencies>

</project>