<?xml version="1.0" encoding="UTF-8"?>
<!--
 * Copyright 2001-2009 The Apache Software Foundation.
 *
 * Licensed 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.juddi</groupId>
		<artifactId>juddi-console</artifactId>
		<version>3.1.3</version>
	</parent>
	<!--
		GWT-Maven archetype generated POM 
	-->
	<artifactId>uddi-portlets</artifactId>
	<packaging>war</packaging>
	<name>UDDI Portlets</name>
	
  <properties>
    <!-- Convenience property to set the GWT version -->
    <gwtVersion>2.3.0</gwtVersion>
    <!-- GWT needs at least java 1.5 -->
    <webappDirectory>${project.build.directory}/${project.build.finalName}</webappDirectory>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  
	<!--  include pluginRepository and repository for GWT-Maven -->
	<pluginRepositories>
		<pluginRepository>
			<id>gwt-maven-plugins</id>
			<url>http://gwt-maven.googlecode.com/svn/trunk/mavenrepo/</url>
		</pluginRepository>
	</pluginRepositories>
	<repositories>
		<repository>
			<id>gwt-maven</id>
			<url>http://gwt-maven.googlecode.com/svn/trunk/mavenrepo/</url>
		</repository>
		<repository>
			<id>apache</id>
			<url>http://people.apache.org/repo/m2-snapshot-repository</url>
		</repository>
	</repositories>
    
	<dependencies>
	    <!--  GWT deps (from central repo) -->
		    <dependency>
      <groupId>com.google.gwt</groupId>
      <artifactId>gwt-servlet</artifactId>
      <version>${gwtVersion}</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>com.google.gwt</groupId>
      <artifactId>gwt-user</artifactId>
      <version>${gwtVersion}</version>
      <scope>provided</scope>
    </dependency>
		
		
		<dependency>
			<groupId>org.apache.juddi</groupId>
			<artifactId>uddi-ws</artifactId>
			<version>3.1.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.juddi</groupId>
			<artifactId>juddi-client</artifactId>
			<version>3.1.3</version>
		</dependency>
		<dependency>
			<groupId>javax.portlet</groupId>
			<artifactId>portlet-api</artifactId>
			<version>1.0</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
            <groupId>org.apache.pluto</groupId>
            <artifactId>pluto-container</artifactId>
            <version>1.1.7</version>
            <scope>provided</scope>
        </dependency>
		<!--  test -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.5</version>
			<scope>test</scope>
		</dependency>
		
		
		
		<dependency>
			<groupId>org.apache.tomcat</groupId>
			<artifactId>catalina</artifactId>
			<version>6.0.33</version>
			<scope>provided</scope>
		</dependency>
	</dependencies>
	<build>
	 <!-- Generate compiled stuff in the folder used for developing mode -->
        <outputDirectory>${webappDirectory}/WEB-INF/classes</outputDirectory>
		<plugins>
			<!-- GWT Maven Plugin -->
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>gwt-maven-plugin</artifactId>
        <version>2.3.0-1</version>
        <executions>
          <execution>
            <goals>
              <goal>compile</goal>
              <!--  <goal>mergewebxml</goal> -->
              <goal>test</goal>
              <goal>generateAsync</goal>
            </goals>
          </execution>
        </executions>
        <!-- Plugin configuration. There are many available options, see 
          gwt-maven-plugin documentation at codehaus.org -->
        <configuration>
          <runTarget>UDDIBrowser.html</runTarget>
          <hostedWebapp>${webappDirectory}</hostedWebapp>
        </configuration>
      </plugin>

      <!-- Copy static web files before executing gwt:run -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1.1</version>
        <executions>
          <execution>
            <phase>compile</phase>
            <goals>
              <goal>exploded</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <warSourceDirectory>war</warSourceDirectory>
          <warSourceExcludes>WEB-INF/deploy/**/*,WEB-INF/classes/org/apache/juddi/portlets/client/*.*,WEB-INF/lib/*.jar</warSourceExcludes>
          <webXml>src/main/webapp/WEB-INF/web.xml</webXml>
          <!--  
          <webResources>src/main/resources</webResources>
          -->
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
      <plugin>
		<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-eclipse-plugin</artifactId>
			<version>2.7</version>
			<configuration>
				<buildOutputDirectory>war/WEB-INF/classes/</buildOutputDirectory>
				<downloadSources>true</downloadSources>
				<downloadJavadocs>true</downloadJavadocs>
				<additionalBuildcommands>
					<buildCommand>
						<name>com.google.gdt.eclipse.core.webAppProjectValidator</name>
					</buildCommand>
					<buildCommand>
						<name>com.google.gwt.eclipse.core.gwtProjectValidator</name>
					</buildCommand>
				</additionalBuildcommands>
				<additionalProjectnatures>
					<projectnature>com.google.gwt.eclipse.core.gwtNature</projectnature>
				</additionalProjectnatures>
				<classpathContainers>
					<classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER</classpathContainer>
					<classpathContainer>com.google.gwt.eclipse.core.GWT_CONTAINER</classpathContainer>
					<classpathContainer>org.eclipse.jdt.junit.JUNIT_CONTAINER/4</classpathContainer>
					<!-- <classpathContainer>com.instantiations.j2ee.J2EE5_CONTAINER</classpathContainer> -->
				</classpathContainers>
			</configuration>
		</plugin>
    </plugins>
  </build>
</project>