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

	<groupId>org.apache.causeway.extensions</groupId>
	<artifactId>causeway-extensions</artifactId>

	<name>Apache Causeway Extensions</name>
	<description>
        Extensions to the Apache Causeway framework itself.
		These are _not_ intended to be called by the domain logic of an Apache Causeway application (see instead org.apache.causeway.platform).
    </description>

	<packaging>pom</packaging>

	<properties>
		<jar-plugin.automaticModuleName>org.apache.causeway.extensions</jar-plugin.automaticModuleName>
		<git-plugin.propertiesDir>org/apache/causeway/extensions</git-plugin.propertiesDir>
	</properties>

	<build>
		<resources>
			<resource>
				<filtering>true</filtering>
				<directory>src/main/resources</directory>
				<includes>
					<include>**</include>
				</includes>
				<excludes>
					<exclude>**/*.zip</exclude>
				</excludes>
			</resource>
			<resource>
				<filtering>false</filtering>
				<directory>src/main/java</directory>
				<includes>
					<include>**</include>
				</includes>
				<excludes>
					<exclude>**/*.java</exclude>
				</excludes>
			</resource>
		</resources>
		<plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
				<!-- goal:jar binds to phase:package -->
				<!-- goal:test-jar supposedly binds to phase:package, but seems to need
					this explicit binding. -->
				<executions>
					<execution>
						<id>package-test-jar</id>
						<phase>package</phase>
						<goals>
							<goal>test-jar</goal>
						</goals>
						<configuration>
							<archive>
								<manifest>
									<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
									<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
								</manifest>
							</archive>
						</configuration>
					</execution>
				</executions>
            </plugin>
		</plugins>
	</build>

	<modules>

		<module>core/commandlog</module>
		<module>core/docgen</module>
		<module>core/excel</module>
		<module>core/executionlog</module>
		<module>core/executionoutbox</module>
		<module>core/executionrepublisher</module>
		<module>core/flyway</module>
		<module>core/layoutloaders</module>

		<module>security/audittrail</module>

		<module>security/secman</module>
		<module>security/spring-oauth2</module>
		<module>security/sessionlog</module>

		<module>vro/cors</module>

		<module>vw/sse</module>
		<module>vw/fullcalendar</module>
		<module>vw/pdfjs</module>
		<module>vw/tabular</module>

	</modules>

</project>


