<?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.1.5</version>
		<relativePath>../pom.xml</relativePath>
	</parent>
	<groupId>org.apache.juddi.example</groupId>
	<artifactId>juddi-examples</artifactId>
	<name>jUDDI Examples</name>
	<packaging>pom</packaging>
	 <prerequisites>
      <maven>3.0.3</maven>
    </prerequisites>
    <modules>
       <module>create-partition</module>
       <module>hello-world</module>
       <module>simple-browse</module>
       <module>simple-publish</module>
       <module>uddi-annotations</module>
       <module>wsdl2uddi</module>
       <module>wsdl2uddi-lifecyle</module>
    </modules>
</project>
