<!--

Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You 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.flex.pmd</groupId>
        <artifactId>flex-pmd</artifactId>
        <version>1.3-SNAPSHOT</version>
    </parent>

	<artifactId>flex-pmd-java</artifactId>
	<packaging>pom</packaging>

	<name>Adobe Flex PMD Java Parent</name>

	<modules>
		<module>as3-parser</module>
		<module>as3-parser-api</module>
		<module>as3-plugin-utils</module>
		<module>flex-pmd-test-resources</module>
		<module>flex-pmd-ruleset</module>
		<module>flex-pmd-cpd</module>
		<module>flex-pmd-cpd-ant-task</module>
		<module>flex-pmd-cpd-maven-plugin</module>
		<module>flex-pmd-cpd-command-line</module>
		<module>flex-pmd-ruleset-api</module>
		<module>flex-pmd-core</module>
		<module>flex-pmd-ant-task</module>
		<module>flex-pmd-maven-plugin</module>
		<module>flex-pmd-command-line</module>
		<module>flex-pmd-command-line-api</module>
		<module>flex-pmd-files</module>
		<module>flex-pmd-metrics</module>
		<module>flex-pmd-metrics-command-line</module>
		<module>flex-pmd-metrics-ant-task</module>
		<module>flex-pmd-metrics-maven-plugin</module>
	</modules>

</project>
