<?xml version="1.0" encoding="UTF-8"?>
<!--
  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.causeway.tooling</groupId>
		<artifactId>causeway-tooling</artifactId>
		<version>2.0.0</version>
	</parent>

	<artifactId>causeway-tooling-java2adoc</artifactId>

	<name>Apache Causeway Tooling - Java to Asciidoc (Code Mining)</name>
	<description>
        Code mining library for Java source to Asciidoc conversion.
    </description>

	<properties>
		<skipTests>true</skipTests>
		<enforcer.skip>true</enforcer.skip>
	</properties>

	<dependencies>

		<dependency>
			<groupId>org.apache.causeway.commons</groupId>
			<artifactId>causeway-commons</artifactId>
		</dependency>

		<dependency>
			<groupId>org.apache.causeway.valuetypes</groupId>
			<artifactId>causeway-valuetypes-asciidoc-builder</artifactId>
		</dependency>

		<dependency>
			<groupId>org.apache.causeway.tooling</groupId>
			<artifactId>causeway-tooling-javamodel</artifactId>
		</dependency>

		<dependency>
			<groupId>org.jsoup</groupId>
			<artifactId>jsoup</artifactId>
		</dependency>

	</dependencies>

</project>


