<?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.2.1</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>
			<artifactId>apache-tomcat</artifactId>
			<groupId>org.apache.juddi.bootstrap</groupId>
			<version>6.0.26</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>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>
			<version>10.4.2.0</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.6</version>
		</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>postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>8.2-504.jdbc3</version>
        </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,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.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.juddi.bootstrap.apache-tomcat.zip.path}" />
								<property name="dependency.juddiv3.war" value="${project.build.directory}/juddiv3-war.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}" />
								<ant antfile="${basedir}/build.xml">
									<property name="dependency.tomcat.zip" value="${dependency.tomcat.zip}" />
									<target name="package-tomcat" />
								</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>
