<?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.wicket</groupId>
		<artifactId>wicket-parent</artifactId>
		<version>10.2.0-SNAPSHOT</version>
		<relativePath>../pom.xml</relativePath>
	</parent>
	<artifactId>wicket-core-tests</artifactId>
	<packaging>jar</packaging>
	<name>Wicket Core Tests</name>
	<description>
		Internal JUnit Tests for Wicket Core (and Tester).
	</description>
	<properties>
		<osgi.export.package>org.apache.wicket.core.tests*;-noimport:=true</osgi.export.package>
		<osgi.import.package>!java*,!kotlin*,!sun.nio.ch,org.slf4j*;version="[1.7,3)",*</osgi.import.package>
		<maven.deploy.skip>true</maven.deploy.skip>
		<japicmp.skip>true</japicmp.skip> <!-- this module is not released -->
	</properties>
	<dependencies>
		<dependency>
			<groupId>jakarta.servlet</groupId>
			<artifactId>jakarta.servlet-api</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.wicket</groupId>
			<artifactId>wicket-tester</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.bouncycastle</groupId>
			<artifactId>bcprov-jdk18on</artifactId>
			<scope>test</scope>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.hamcrest</groupId>
			<artifactId>hamcrest</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<!-- 
	WICKET-7072:
	To run this project successfully we need two things:
	(1) no module-info,
	    otherwise error "The package org.apache.wicket conflicts with a package accessible from another module")
	(2) useModulePath=false for maven-compiler plugin available for 3.11+ (see also WICKET-7019),
	    otherwise error "Can't compile test sources when main sources are missing a module descriptor")
	    see https://maven.apache.org/plugins/maven-compiler-plugin/plugin-info.html
	-->
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
        		<executions>
          			<execution>
						<id>test-compile</id>
						<goals>
							<goal>testCompile</goal>
						</goals>
						<configuration>
							<useModulePath>false</useModulePath>
						</configuration>
          			</execution>
       			</executions>
			</plugin>
		</plugins>
	</build>
  	
</project>
