<?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-parent</artifactId>
		<version>3.3.5</version>
	</parent>
	<artifactId>juddi-tomcat</artifactId>
	<name>jUDDI Tomcat Packaging</name>
	<packaging>pom</packaging>
	<dependencies>
		<dependency>
			<groupId>commons-discovery</groupId>
			<artifactId>commons-discovery</artifactId>
			<version>0.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.tomcat</groupId>
			<artifactId>tomcat</artifactId>
			<version>${apache.tomcat.version}</version>
		<type>zip</type>

</dependency>


		<dependency>
			<artifactId>juddiv3-war</artifactId>
			<groupId>org.apache.juddi</groupId>
			<version>${project.parent.version}</version>
			<type>war</type>
		</dependency>
		<dependency>
			<artifactId>juddiv3-war-repl</artifactId>
			<groupId>org.apache.juddi</groupId>
			<version>${project.parent.version}</version>
			<type>war</type>
		</dependency>
		<dependency>
            <artifactId>juddi-gui-war</artifactId>
            <groupId>org.apache.juddi</groupId>
            <version>${project.parent.version}</version>
            <type>war</type>
        </dependency>
		<dependency>
			<groupId>org.apache.derby</groupId>
			<artifactId>derby</artifactId>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<dependency>
          <groupId>org.apache.geronimo.specs</groupId>
          <artifactId>geronimo-jaxws_2.2_spec</artifactId>
          <version>1.0</version>
          <type>jar</type>
        </dependency>
		<dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
        </dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.13</version>
		</dependency>
            <dependency>
                    <groupId>org.json</groupId>
                    <artifactId>json</artifactId>
                    <version>20090211</version>
            </dependency>
                                    
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
				<version>2.2</version>
				<executions>
					<execution>
						<id>copy-wars</id>
						<phase>package<!-- or any other valid maven phase --></phase>
						<goals>
							<goal>copy-dependencies</goal>
						</goals>
						<configuration>
							<stripVersion>true</stripVersion>
							<includeGroupIds>org.apache.juddi</includeGroupIds>
							<includeArtifactIds>juddiv3-war,juddiv3-war-repl,juddi-gui-war</includeArtifactIds>
							<outputDirectory>
								${project.build.directory}
							</outputDirectory>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-install-plugin</artifactId>
				<version>2.1</version>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-antrun-plugin</artifactId>
				<version>1.3</version>
				<executions>
					<execution>
						<id>test</id>
						<phase>package</phase>
						<configuration>
							<tasks>
								<property name="compile_classpath" refid="maven.compile.classpath" />
								<property name="runtime_classpath" refid="maven.runtime.classpath" />
								<property name="test_classpath" refid="maven.test.classpath" />
								<property name="plugin_classpath" refid="maven.plugin.classpath" />
								<property name="project.version" value="${project.version}" />
								
								<property name="dependency.log4j.jar" value="${maven.dependency.log4j.log4j.jar.path}" />
								<property name="dependency.mysql.jar" value="${maven.dependency.mysql.mysql-connector-java.jar.path}" />
								<property name="dependency.postgres.jar" value="${maven.dependency.org.postgresql.postgresql.jar.path}" />
								<property name="dependency.commons-discovery.jar" value="${maven.dependency.commons-discovery.commons-discovery.jar.path}" />
								<property name="dependency.derby.jar" value="${maven.dependency.org.apache.derby.derby.jar.path}" />
								<property name="dependency.tomcat.zip" value="${maven.dependency.org.apache.tomcat.tomcat.zip.path}" />
								<property name="dependency.juddiv3.war" value="${project.build.directory}/juddiv3-war.war" />
								<property name="dependency.juddiv3replication.war" value="${project.build.directory}/juddiv3-war-repl.war" />
								<property name="dependency.juddi-gui.war" value="${project.build.directory}/juddi-gui-war.war" />
								<property name="dependency.jaxws.jar" value="${maven.dependency.org.apache.geronimo.specs.geronimo-jaxws_2.2_spec.jar.path}" />
								<property name="apache.tomcat.version" value="${apache.tomcat.version}" />
								<ant antfile="${basedir}/build.xml">
									<property name="dependency.tomcat.zip" value="${dependency.tomcat.zip}" />
									<target name="threenode" />
									
								</ant>
							</tasks>
						</configuration>
						<goals>
							<goal>run</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-assembly-plugin</artifactId>
				<version>2.2-beta-3</version>
				<executions>
					<execution>
						<id>make-assembly</id>
						<phase>package</phase>
						<goals>
							<goal>attached</goal>
						</goals>
						<configuration>
							<descriptors>
								<descriptor>${basedir}/assembly.xml</descriptor>
							</descriptors>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>
