<?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-RC3</version>
	</parent>

	<artifactId>causeway-tooling-javamodel</artifactId>

	<name>Apache Causeway - Tooling - Java Model (Code Mining)</name>
	<description>
        Code mining library for Java bytecode introspection.
    </description>

	<properties>
		<code-assert.version>0.9.14</code-assert.version>
		<javaparser.version>3.25.5</javaparser.version>
		<skipTests>true</skipTests>
		<enforcer.skip>true</enforcer.skip>
	</properties>

	<repositories>
		<repository>
			<id>jitpack.io</id>
			<url>https://jitpack.io</url>
		</repository>
	</repositories>

	<dependencies>

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

		<dependency>
			<groupId>com.github.javaparser</groupId>
			<artifactId>javaparser-core</artifactId>
			<version>${javaparser.version}</version>
		</dependency>

		<!--
			as a workaround for code-assert-core not having an option to add 'adoc' as a language
			we use repo jitpack.io (as declared above) to pull a fork on github
			see	https://github.com/nidi3/code-assert/pull/47
		 -->
		<dependency>
		    <groupId>com.github.andi-huber</groupId>
		    <artifactId>code-assert</artifactId>
		    <version>-SNAPSHOT</version>
<!-- 			<groupId>guru.nidi</groupId> -->
<!-- 			<artifactId>code-assert</artifactId> -->
<!-- 			<version>${code-assert.version}</version> -->
			<exclusions>
				<exclusion>
					<groupId>com.pinterest.ktlint</groupId>
					<artifactId>ktlint-ruleset-standard</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.pinterest.ktlint</groupId>
					<artifactId>ktlint-core</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.puppycrawl.tools</groupId>
					<artifactId>checkstyle</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>jcl-over-slf4j</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>jul-to-slf4j</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.jetbrains.kotlin</groupId>
					<artifactId>kotlin-compiler-embeddable</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.h3xstream.findsecbugs</groupId>
					<artifactId>findsecbugs-plugin</artifactId>
				</exclusion>
				<exclusion>
					<groupId>net.sourceforge.pmd</groupId>
					<artifactId>pmd-java</artifactId>
				</exclusion>
				<exclusion>
					<groupId>io.gitlab.arturbosch.detekt</groupId>
					<artifactId>detekt-rules</artifactId>
				</exclusion>
				<exclusion>
					<groupId>io.gitlab.arturbosch.detekt</groupId>
					<artifactId>detekt-core</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.github.spotbugs</groupId>
					<artifactId>spotbugs</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.hamcrest</groupId>
					<artifactId>hamcrest-core</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

	</dependencies>

</project>


