<?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.juddi-docs</groupId>
        <artifactId>juddi-docs</artifactId>
        <version>3.3.11-SNAPSHOT</version>
    </parent>
	<packaging>pom</packaging>
	<groupId>org.apache.juddi.juddi-docs</groupId>
	<artifactId>juddi-guide-parent</artifactId>
	<name>jUDDI Guide Parent</name>
	<description>jUDDI (pronounced "Judy") is an open source Java
		implementation of the Universal Description, Discovery, and
		Integration (UDDI) specification for Web Services.</description>
	<url>http://juddi.apache.org/</url>
	
	<prerequisites>
      <maven>3.0.3</maven>
    </prerequisites>
	
	<modules>
		<module>Guide</module>
		<module>ClientGuide</module>
    </modules>

</project>
