<?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</groupId>
		<artifactId>causeway-bom</artifactId>
		<version>2.0.0-SNAPSHOT</version>
		<relativePath>../bom/pom.xml</relativePath>
	</parent>

	<artifactId>antora</artifactId>

	<packaging>pom</packaging>

	<name>Apache Causeway - Antora</name>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.rat</groupId>
				<artifactId>apache-rat-plugin</artifactId>
				<version>0.16.1</version>

				<configuration>
					<addDefaultLicenseMatchers>true</addDefaultLicenseMatchers>
					<excludeSubProjects>true</excludeSubProjects>
					<excludes>
                        <exclude>**/target/**</exclude>
                        <exclude>**/target-ide/**</exclude>

                        <exclude>**/node_modules/**</exclude>
                        <exclude>**/node/npm</exclude>
                        <exclude>**/node/npm.cmd</exclude>

                        <exclude>**/*.project</exclude>
                        <exclude>**/.classpath</exclude>
                        <exclude>**/.settings/**</exclude>
                        <exclude>**/*.launch</exclude>
                        <exclude>**/schema.gql</exclude>
                        <exclude>**/jquery.livequery.js</exclude>
                        <exclude>**/*._.gql</exclude>
                        <exclude>**/.gitkeep</exclude>

                        <exclude>**/*.iml</exclude>
                        <exclude>**/intellij/launch/*.xml</exclude>

                        <exclude>**/gradle/wrapper/gradle-wrapper.properties</exclude>
                        <exclude>**/gradlew</exclude>
                        <exclude>**/gradlew.bat</exclude>
                        <exclude>**/rebel.xml</exclude>
                        <exclude>**/translations**.po</exclude>
                        <exclude>**/translations.pot</exclude>

                        <exclude>**/META-INF/spring.factories</exclude>
                        <exclude>**/MANIFEST.MF</exclude>
                        <exclude>**/META-INF/services/**</exclude>

                        <exclude>**/src/main/resources/supplemental-models.xml</exclude>

                        <exclude>**/webpack.config.js</exclude>
                        <exclude>**/webpack.generated.js</exclude>
                        <exclude>**/pnpm-lock.yaml</exclude>
                        <exclude>**/pnpmfile.js</exclude>
                        <exclude>**/*.min.js</exclude>

                        <exclude>**/*.pdn</exclude>
                        <exclude>**/*.svg</exclude>
                        <exclude>**/*.rtf</exclude>
                        <exclude>**/*.drawio.svg</exclude>
                        <exclude>**/*.json</exclude>

                        <exclude>**/supplemental-ui/**</exclude>
                        <exclude>**/_nav.adoc</exclude>
                        <exclude>**/module-nav.adoc</exclude>
                        <exclude>**/component-nav.adoc</exclude>
                        <exclude>**/partials/extensions.adoc</exclude>

                        <exclude>**/*.ucd</exclude>
                        <exclude>**/*.ucls</exclude>
                        <exclude>**/*.puml</exclude>

                        <exclude>**/datanucleus.log</exclude>

                        <exclude>**/bootstrap-datetimepicker.min.css</exclude>
                        <exclude>**/bootstrap-datetimepicker.css</exclude>

                        <exclude>**/jquery.zclip.js</exclude>
                        <exclude>**/simple-sidebar.css</exclude>
                        <exclude>**/causeway-bootstrap-growl.js</exclude>
                        <exclude>**/moment.js</exclude>
                        <exclude>**/prism*.js</exclude>
                        <exclude>**/prism*.css</exclude>
                        <exclude>**/vega*.js</exclude>

                        <exclude>**/css/home/scss-files.txt</exclude>
                        <exclude>**/css/home/styles.css</exclude>
                        <exclude>**/css/site-custom.css</exclude>

                        <exclude>**/swagger-ui/**</exclude>

                        <exclude>**/select2-bootstrap.css</exclude>

                        <exclude>**/wicket-xhtml1.4-strict.dtd</exclude>

                        <exclude>**/application.js</exclude>

                        <exclude>**/xml/objects/**</exclude>
                        <exclude>**/test.data</exclude>
                        <exclude>**/fixture-data/**</exclude>
                        <exclude>**/*.approved.*</exclude>
                        <exclude>**/approved/*.adoc</exclude>
                        <exclude>**/secman-permissions.yml</exclude>

                        <exclude>**/fakedata/applib/services/clobs/*.dtd</exclude>
                        <exclude>**/fakedata/applib/services/clobs/*.dcl</exclude>
                        <exclude>**/fakedata/applib/services/clobs/*.soc</exclude>
                        <exclude>**/fakedata/applib/services/clobs/vs</exclude>
                        <exclude>**/fakedata/applib/services/clobs/vx</exclude>

                        <exclude>**/viewer/wicket/ui/components/**/*.css</exclude>
                        <exclude>**/viewer/wicket/ui/components/**/*.js</exclude>

                        <exclude>**/causeway/valuetypes/asciidoc/builder/src/test/resources/**</exclude>

                        <exclude>**/incubator/clients/kroviz/package.json.d/project.info</exclude>
                        <exclude>**/kroviz/webpack.config.d/**</exclude>
					</excludes>
					<licenses>
						<license
								implementation="org.apache.rat.analysis.license.SimplePatternBasedLicense">
							<licenseFamilyCategory>AL2  </licenseFamilyCategory>
							<licenseFamilyName>Apache License 2.0</licenseFamilyName>
							<notes />
							<patterns>
								<pattern>Licensed to the Apache Software Foundation (ASF) under
									one</pattern>
							</patterns>
						</license>
					</licenses>
					<licenseFamilies>
						<licenseFamily
								implementation="org.apache.rat.license.SimpleLicenseFamily">
							<familyName>Apache License 2.0</familyName>
						</licenseFamily>
					</licenseFamilies>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>


