<?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/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.apache</groupId>
		<artifactId>apache</artifactId>
		<version>24</version>
	</parent>
	<groupId>org.apache.systemds</groupId>
	<version>3.4.0</version>
	<artifactId>systemds</artifactId>
	<packaging>jar</packaging>
	<name>Apache SystemDS</name>
	<url>https://github.com/apache/systemds</url>
	<description>An open source ML system for the end-to-end data science lifecycle</description>
	<licenses>
		<license>
			<name>Apache 2.0 License</name>
			<url>http://www.apache.org/licenses/LICENSE-2.0.html</url>
		</license>
	</licenses>

	<properties>
		<hadoop.version>3.3.6</hadoop.version>
		<antlr.version>4.8</antlr.version>
		<protobuf.version>3.23.4</protobuf.version>
		<spark.version>3.5.7</spark.version>
		<jackson.version>2.15.4</jackson.version>
		<scala.version>2.12.18</scala.version>
		<scala.binary.version>2.12</scala.binary.version>
		<delta-kernel.version>3.3.2</delta-kernel.version>
		<parquet.version>1.13.1</parquet.version>
		<maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss z</maven.build.timestamp.format>
		<project.build.outputTimestamp>1</project.build.outputTimestamp>
		<enableGPU>false</enableGPU>
		<jcuda.scope>provided</jcuda.scope>
		<jcuda.version>12.6.0</jcuda.version>
		<slf4j.version>2.0.11</slf4j.version>
		<log4j.version>2.22.1</log4j.version>
		<maven-clean-plugin.version>3.2.0</maven-clean-plugin.version>
		<maven-surefire-plugin.version>3.5.2</maven-surefire-plugin.version>
        <maven-checkstyle-plugin.version>3.3.1</maven-checkstyle-plugin.version>
		<maven-remote-resources-plugin.version>3.0.0</maven-remote-resources-plugin.version>
		<maven-javadoc-plugin.version>3.5.0</maven-javadoc-plugin.version>
		<maven-javadoc-plugin.version2>3.2.0</maven-javadoc-plugin.version2>
		<maven-gpg-plugin.version>3.0.1</maven-gpg-plugin.version>
		<maven-assembly-plugin.version>3.5.0</maven-assembly-plugin.version>
		<maven-dependency-plugin.version>3.5.0</maven-dependency-plugin.version>
		<maven-jar-plugin.version>3.3.0</maven-jar-plugin.version>
		<maven-shade-plugin.version>3.5.0</maven-shade-plugin.version>
		<maven-compiler-plugin.version>3.11.0</maven-compiler-plugin.version>
		<maven-antrun-plugin.version>3.1.0</maven-antrun-plugin.version>
		<!-- aws-java-sdk-bundle version should align with hadoop-aws version -->
		<!-- aws-java-sdk-bundle.version>1.12.367</aws-java-sdk-bundle.version -->
		<!-- Set java compile level via argument, ex: 1.8 1.9 10 11-->
		<java.level>17</java.level>
		<java.version>{java.level}</java.version>
		<!-->Testing settings<!-->
		<maven.test.skip>false</maven.test.skip>
		<test>org.apache.sysds.test.usertest.**</test>
		<test-parallel>classes</test-parallel>
		<test-threadCount>2</test-threadCount>
		<test-forkCount>1C</test-forkCount>
		<!-- Per-fork timeout in seconds; kills hung forks before the 30 min CI cap.
		     Kept well below the cap minus the time spent on earlier forks so the
		     timeout actually fires (and names the hung test) instead of letting CI
		     cancel the whole job first. -->
		<test-forkedProcessTimeout>600</test-forkedProcessTimeout>
		<rerun.failing.tests.count>2</rerun.failing.tests.count>
		<jacoco.skip>false</jacoco.skip>
		<checkstyle.skip>true</checkstyle.skip>
		<doc.skip>false</doc.skip>
		<jacoco.include>**</jacoco.include>
		<automatedtestbase.outputbuffering>false</automatedtestbase.outputbuffering>
		<argLine>-Xms3000m -Xmx3000m -Xmn300m</argLine>
		<enableStats>false</enableStats>

		<!-- Dependent on Spark open to access deprecated api components from <= Java 11. Should be removed once Spark updates fully to Java 17 -->
		<jvm.addopens>
			--add-opens=java.base/java.nio=ALL-UNNAMED 
			--add-opens=java.base/java.io=ALL-UNNAMED 
			--add-opens=java.base/java.util=ALL-UNNAMED 
			--add-opens=java.base/java.lang=ALL-UNNAMED 
			--add-opens=java.base/java.lang.ref=ALL-UNNAMED
			--add-opens=java.base/java.util.concurrent=ALL-UNNAMED
			--add-opens=java.base/sun.nio.ch=ALL-UNNAMED
			--add-modules=jdk.incubator.vector
		</jvm.addopens>
	</properties>

	<repositories>
		<repository>
			<id>central</id>
			<url>https://repo1.maven.org/maven2</url>
			<releases>
				<enabled>true</enabled>
			</releases>
		</repository>
	</repositories>

	<scm>
		<developerConnection>scm:git:https://github.com/apache/systemds.git</developerConnection>
		<tag>3.4.0-rc2</tag>
	</scm>

	<build>
		<!-- Adds scripts to main jar, in-memory jar, sources jar, and standalone jar -->
		<resources>
			<resource>
				<directory>scripts</directory>
				<excludes>
					<exclude>algorithms/obsolete/*</exclude>
					<exclude>datagen/obsolete/*</exclude>
					<exclude>perftest/**/*</exclude>
					<exclude>perftest</exclude>
					<exclude>perftestDeprecated/*</exclude>
					<exclude>perftestDeprecated</exclude>
					<exclude>staging/**/*</exclude>
					<exclude>monitoring/**/*</exclude>
					<exclude>monitoring</exclude>
					<exclude>nn/test/compare_backends/*</exclude>
					<exclude>nn/test/compare_backends</exclude>
					<exclude>tutorials/**/*</exclude>
					<exclude>tutorials</exclude>
					<exclude>aws</exclude>
				</excludes>
				<targetPath>scripts</targetPath>
			</resource>
			<resource>
				<directory>src/main/cuda/kernels</directory>
				<includes>
					<include>SystemDS.ptx</include>
					<include>reduction.ptx</include>
				</includes>
				<targetPath>cuda/kernels</targetPath>
			</resource>
			<resource>
				<directory>src/main/cpp/lib</directory>
				<targetPath>lib</targetPath>
			</resource>
			<resource>
				<directory>src/main/cuda/spoof</directory>
				<targetPath>cuda/spoof</targetPath>
			</resource>
			<resource>
				<directory>src/main/cuda/headers</directory>
				<includes>
					<include>agg_ops.cuh</include>
					<include>operators.cuh</include>
					<include>reduction.cuh</include>
					<include>spoof_utils.cuh</include>
					<include>TempStorage.cuh</include>
					<include>utils.cuh</include>
					<include>vector_write.cuh</include>
					<include>vector_add.cuh</include>
					<include>Matrix.h</include>
				</includes>
				<targetPath>cuda/headers</targetPath>
			</resource>
			<resource>
				<directory>src/main/java/org/apache/sysds/hops/codegen/cplan/java</directory>
				<includes>
					<include>Cellwise.java.template</include>
					<include>Rowwise.java.template</include>
				</includes>
				<targetPath>java/spoof</targetPath>
			</resource>
			<resource>
				<directory>src/test/config/hadoop_bin_windows/bin</directory>
				<targetPath>../lib/hadoop/bin</targetPath>
			</resource>
			<resource>
				<directory>src/assembly/bin</directory>
				<targetPath>META-INF/</targetPath>
			</resource>
			<resource>
				<!-- add the Log4j properties file into the jar to have default logging settings -->
				<directory>conf</directory>
				<includes>
					<include>log4j.properties</include>
				</includes>
				<targetPath>./</targetPath>
			</resource>
		</resources>
		<testResources>
			<testResource>
				<directory>src/test/resources</directory>
				<!-- Exclude all datasets to avoid copying to target on all tests. -->
				<excludes>
					<exclude>datasets/**</exclude>
					<exclude>expected/**</exclude>
					<exclude>component/**</exclude>
				</excludes>
			</testResource>
		</testResources>

		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
				<version>${maven-dependency-plugin.version}</version>
				<executions>
					<execution>
						<phase>compile</phase>
						<goals>
							<goal>copy-dependencies</goal>
						</goals>
						<configuration>
							<silent>true</silent>
							<outputDirectory>${project.build.directory}/lib</outputDirectory>
						</configuration>
					</execution>
				</executions>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<version>${maven-jar-plugin.version}</version>
				<executions>
					<execution>
						<id>default-jar</id>
						<phase>package</phase>
						<goals>
							<goal>jar</goal>
						</goals>
						<configuration>
							<forceCreation>true</forceCreation>
							<archive>
								<manifest>
									<addClasspath>true</addClasspath>
									<classpathPrefix>lib/</classpathPrefix>
									<mainClass>org.apache.sysds.api.DMLScript</mainClass>
								</manifest>
							</archive>
						</configuration>
					</execution>
					<execution>
						<id>perf-jar</id>
						<goals>
							<goal>test-jar</goal>
						</goals>
						<configuration>
							<classifier>perf</classifier>
							<includes>
								<include>org/apache/sysds/performance/**</include>
							</includes>
							<archive>
								<manifest>
									<addClasspath>true</addClasspath>
									<classpathPrefix>lib/</classpathPrefix>
									<mainClass>org.apache.sysds.performance.Main</mainClass>
								</manifest>
								<manifestEntries>
									<Class-Path>SystemDS.jar ${project.artifactId}-${project.version}-tests.jar</Class-Path>
								</manifestEntries>
							</archive>
						</configuration>
					</execution>
					<execution>
						<id>test-jar</id>
						<goals>
							<goal>test-jar</goal>
						</goals>
						<configuration>
							<includes>
								<include>org/apache/sysds/test/**</include>
							</includes>
						</configuration>
					</execution>
					<execution>
						<id>ropt-jar</id>
						<phase>package</phase>
						<goals>
							<goal>jar</goal>
						</goals>
						<configuration>
							<classifier>ropt</classifier>
							<forceCreation>true</forceCreation>
							<archive>
								<manifest>
									<addClasspath>true</addClasspath>
									<classpathPrefix>lib/</classpathPrefix>
									<mainClass>org.apache.sysds.resource.ResourceOptimizer</mainClass>
								</manifest>
								<manifestEntries>
									<Class-Path>SystemDS.jar ${project.artifactId}-${project.version}.jar</Class-Path>
								</manifestEntries>
							</archive>
						</configuration>
					</execution>
				</executions>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-shade-plugin</artifactId>
				<version>${maven-shade-plugin.version}</version>
				<executions>
					<execution>
						<id>default-shade</id>
						<phase>package</phase>
						<goals>
							<goal>shade</goal>
						</goals>
						<configuration>
							<artifactSet>
								<includes>
									<include>org.apache.wink:wink-json4j:*</include>
									<include>org.antlr:antlr4-runtime:*</include>
								</includes>
							</artifactSet>
							<shadedArtifactAttached>true</shadedArtifactAttached>
							<shadedClassifierName>shaded</shadedClassifierName>
						</configuration>
					</execution>
				</executions>
				<configuration>
					<filters>
						<filter>
							<artifact>org.apache.wink:wink-json4j:*</artifact>
							<excludes>
								<exclude>META-INF/DEPENDENCIES</exclude>
								<exclude>META-INF/LICENSE</exclude>
								<exclude>META-INF/NOTICE</exclude>
								<exclude>META-INF/MANIFEST.MF</exclude>
								<!-- Exclude wink if already shaded -->
								<!-- <exclude>org/apache/wink/**</exclude> -->
							</excludes>
						</filter>
						<filter>
							<artifact>org.antlr:antlr4-runtime:*</artifact>
							<excludes>
								<exclude>META-INF/MANIFEST.MF</exclude>
								<!-- Exclude antlr4 if already shaded -->
								<!-- <exclude>org/antlr/v4/**</exclude>
								<exclude>META-INF/maven/org.antlr/**</exclude> -->
							</excludes>
						</filter>
					</filters>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>${maven-compiler-plugin.version}</version>
				<configuration>
					<compilerArgument>-Xlint:unchecked</compilerArgument>
					<source>${java.level}</source>
					<target>${java.level}</target>
					<release>${java.level}</release>
					<compilerArgs>
						<arg>--add-modules=jdk.incubator.vector</arg>
					</compilerArgs>
				</configuration>
			</plugin>


            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <version>${maven-checkstyle-plugin.version}</version>

                <executions>
                    <execution>
                        <id>checkstyle</id>
                        <!-- runs on mvn test -->
                        <phase>test</phase>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>

                <configuration>
                    <configLocation>dev/checkstyle/checkstyle.xml</configLocation>
                    <skip>${checkstyle.skip}</skip>
                    <failOnViolation>true</failOnViolation>
                    <includeTestSourceDirectory>true</includeTestSourceDirectory>
                    <outputFile>${project.build.directory}/checkstyle-result.xml</outputFile>
                    <outputFileFormat>xml</outputFileFormat>
                    <consoleOutput>true</consoleOutput>
                </configuration>
            </plugin>

            <plugin>
				<!-- unit tests -->
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>${maven-surefire-plugin.version}</version>
				<configuration>
					<skipTests>${maven.test.skip}</skipTests>
					<parallel>${test-parallel}</parallel>
					<threadCount>${test-threadCount}</threadCount>
					<!-- 1C means the number of threads times 1 possible maximum forks for testing-->
					<forkCount>${test-forkCount}</forkCount>
					<reuseForks>false</reuseForks>
					<!-- Kill hung test forks before CI cancels the whole job. -->
					<forkedProcessTimeoutInSeconds>${test-forkedProcessTimeout}</forkedProcessTimeoutInSeconds>
					<!-- Force-kill forks that still have live threads after the test class completes. -->
					<forkedProcessExitTimeoutInSeconds>30</forkedProcessExitTimeoutInSeconds>
					<!-- Let forks detect a dead parent and self-terminate. -->
					<enableProcessChecker>native</enableProcessChecker>
					<!-- <reportFormat>brief</reportFormat> -->
					<trimStackTrace>true</trimStackTrace>
					<rerunFailingTestsCount>${rerun.failing.tests.count}</rerunFailingTestsCount>
					<systemPropertyVariables>
						<log4j.configurationFile>file:src/test/resources/log4j.properties</log4j.configurationFile>
					</systemPropertyVariables>
					<argLine>
						@{argLine} ${jvm.addopens}
					</argLine>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-antrun-plugin</artifactId>
				<version>${maven-antrun-plugin.version}</version>
				<executions>
					<execution>
						<id>copy-sysds</id>
						<phase>package</phase>
						<configuration>
							<target name="copy and rename JAR files">
								<!-- https://ant.apache.org/manual/Tasks -->
								<copy file="${project.build.directory}/${project.artifactId}-${project.version}-shaded.jar" tofile="${project.build.directory}/SystemDS.jar" />
								<move file="${project.build.directory}/${project.artifactId}-${project.version}.jar" tofile="${project.build.directory}/${project.artifactId}-${project.version}-unshaded.jar" />
							</target>
						</configuration>
						<goals>
							<goal>run</goal>
						</goals>
					</execution>
					<execution>
						<id>move-shaded-jar</id>
						<phase>package</phase>
						<configuration>
							<target name="copy and rename JAR files">
								<!-- https://ant.apache.org/manual/Tasks -->
								<copy file="${project.build.directory}/${project.artifactId}-${project.version}-shaded.jar" tofile="${project.build.directory}/${project.artifactId}-${project.version}.jar" />
							</target>
						</configuration>
						<goals>
							<goal>run</goal>
						</goals>
					</execution>
					<execution>
						<id>copy-test-jar</id>
						<phase>package</phase>
						<configuration>
							<target name="copy and rename test JAR" unless="maven.test.skip">
								<copy file="${project.build.directory}/${project.artifactId}-${project.version}-tests.jar" tofile="${project.build.directory}/SystemDS-tests.jar" />
								<copy file="${project.build.directory}/${project.artifactId}-${project.version}-perf.jar" tofile="${project.build.directory}/SystemDS-perf.jar" />
							</target>
						</configuration>
						<goals>
							<goal>run</goal>
						</goals>
					</execution>
					<execution>
						<id>rename-ropt-jar</id>
						<phase>package</phase>
						<configuration>
							<target name="rename test JAR">
								<copy file="${project.build.directory}/${project.artifactId}-${project.version}-ropt.jar" tofile="${project.build.directory}/ResourceOptimizer.jar" />
							</target>
						</configuration>
						<goals>
							<goal>run</goal>
						</goals>
					</execution>
				</executions>
			</plugin>

			<plugin>
				<groupId>org.jacoco</groupId>
				<artifactId>jacoco-maven-plugin</artifactId>
				<version>0.8.12</version>
				<configuration>
					<includes>
						<include>${jacoco.include}</include>
					</includes>
					<output>file</output>
					<destFile>${project.build.directory}/jacoco.exec</destFile>
					<fileSets>
						<fileSet>
							<directory>${project.build.directory}</directory>
							<includes>
								<include>*.exec</include>
							</includes>
						</fileSet>
						<fileSet>
							<directory>${project.build.directory}</directory>
							<includes>
								<include>transient_jacoco**/*.exec</include>
							</includes>
						</fileSet>
						<fileSet>
							<directory>${project.build.directory}</directory>
							<includes>
								<include>federated_jacoco/*.exec</include>
							</includes>
						</fileSet>
					</fileSets>
				</configuration>
				<executions>
					<execution>
						<id>default-prepare-agent</id>
						<goals>
							<goal>prepare-agent</goal>
						</goals>
					</execution>
				</executions>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-javadoc-plugin</artifactId>
				<version>${maven-javadoc-plugin.version}</version>
				<configuration>
					<quiet>true</quiet>
					<!-- Skip java docs creation if not explicitly asked, to create use -P distribution-->
					<skip>true</skip>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>properties-maven-plugin</artifactId>
				<version>1.1.0</version>
				<executions>
					<execution>
						<phase>generate-resources</phase>
						<goals>
							<goal>write-project-properties</goal>
						</goals>
						<configuration>
							<outputFile>${project.build.testOutputDirectory}/my.properties</outputFile>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>

	</build>

	<profiles>
		<profile>
			<id>windows-x86_64</id>
			<activation>
				<os>
					<family>windows</family>
					<arch>amd64</arch>
				</os>
			</activation>
			<properties>
				<jcuda.os>windows</jcuda.os>
				<jcuda.arch>x86_64</jcuda.arch>
			</properties>
		</profile>
		<profile>
			<id>linux-x86_64</id>
			<activation>
				<os>
					<family>unix</family>
					<arch>amd64</arch>
				</os>
			</activation>
			<properties>
				<jcuda.os>linux</jcuda.os>
				<jcuda.arch>x86_64</jcuda.arch>
			</properties>
		</profile>
		<profile>
			<id>apple-x86_64</id>
			<activation>
				<os>
					<family>mac</family>
					<arch>x86_64</arch>
				</os>
			</activation>
			<properties>
				<jcuda.os>apple</jcuda.os>
				<jcuda.arch>x86_64</jcuda.arch>
			</properties>
		</profile>
		<profile>
			<id>linux-ppc_64</id>
			<activation>
				<os>
					<family>unix</family>
					<arch>ppc64le</arch>
				</os>
			</activation>
			<properties>
				<jcuda.os>linux</jcuda.os>
				<jcuda.arch>ppc_64</jcuda.arch>
			</properties>
		</profile>

		<profile>
			<id>eclipse-only</id>
			<activation>
				<property>
					<name>m2e.version</name>
				</property>
			</activation>
			<build>
				<pluginManagement>
					<plugins>
						<!-- Prevent m2e warnings in Eclipse. -->
						<plugin>
							<groupId>org.eclipse.m2e</groupId>
							<artifactId>lifecycle-mapping</artifactId>
							<version>1.0.0</version>
							<configuration>
								<lifecycleMappingMetadata>
									<pluginExecutions>
										<pluginExecution>
											<pluginExecutionFilter>
												<groupId>org.apache.maven.plugins</groupId>
												<artifactId>maven-remote-resources-plugin</artifactId>
												<versionRange>(,${maven-remote-resources-plugin.version}]</versionRange>
												<goals>
													<goal>process</goal>
												</goals>
											</pluginExecutionFilter>
											<action>
												<ignore />
											</action>
										</pluginExecution>
										<pluginExecution>
											<pluginExecutionFilter>
												<groupId>org.apache.maven.plugins</groupId>
												<artifactId>maven-clean-plugin</artifactId>
												<versionRange>(,${maven-clean-plugin.version}]</versionRange>
												<goals>
													<goal>clean</goal>
												</goals>
											</pluginExecutionFilter>
											<action>
												<ignore />
											</action>
										</pluginExecution>
										<pluginExecution>
											<pluginExecutionFilter>
												<groupId>org.apache.maven.plugins</groupId>
												<artifactId>maven-dependency-plugin</artifactId>
												<versionRange>(,${maven-dependency-plugin.version}]</versionRange>
												<goals>
													<goal>copy-dependencies</goal>
												</goals>
											</pluginExecutionFilter>
											<action>
												<ignore />
											</action>
										</pluginExecution>
									</pluginExecutions>
								</lifecycleMappingMetadata>
							</configuration>
						</plugin>
					</plugins>
				</pluginManagement>
			</build>
		</profile>

		<profile>
			<id>rat</id>
			<build>
				<defaultGoal>clean org.apache.rat:apache-rat-plugin:check</defaultGoal>
				<plugins>
					<plugin>
						<groupId>org.apache.rat</groupId>
						<artifactId>apache-rat-plugin</artifactId>
						<version>0.15</version>
						<executions>
							<execution>
								<phase>package</phase>
								<goals>
									<goal>check</goal>
								</goals>
							</execution>
						</executions>
						<configuration>
							<excludes>
								<exclude>scripts/perftest/results/**</exclude>
								<exclude>scripts/perftest/temp/**</exclude>
								<exclude>scripts/perftest/logs/**</exclude>
								<exclude>scripts/monitoring/node_modules/**</exclude>
								<exclude>.repository/</exclude>
								<exclude>.idea/</exclude>
								<exclude>.mvn/</exclude>
								<exclude>.git/</exclude>
								<exclude>.settings</exclude>
								<exclude>.classpath</exclude>
								<exclude>.project</exclude>
								<exclude>CITATION</exclude>
								<exclude>src/main/python/docs/build/**/*</exclude>
								<exclude>src/main/python/docs/source/_build/**</exclude>
								<exclude>src/main/python/generator/resources/**</exclude>
								<exclude>src/main/python/generator.log</exclude>
								<exclude>**/systemds.egg-info/**</exclude>
								<exclude>docs/api/**/*</exclude>
								<exclude>docs/_site/**/*</exclude>
								<exclude>docs/.jekyll-cache/**/*</exclude>
								<exclude>docs/css/bootstrap.min.css</exclude>
								<exclude>docs/css/pygments-default.css</exclude>
								<exclude>docs/js/vendor/**/*</exclude>
								<exclude>**/*.lock</exclude>
								<exclude>**/*.csv</exclude>
								<exclude>**/*.ijv</exclude>
								<exclude>**/*.json</exclude>
								<exclude>**/*.libsvm</exclude>
								<exclude>**/*.mtx</exclude>
								<exclude>**/*.mtd</exclude>
								<exclude>**/*.out</exclude>
								<exclude>**/__pycache__/**</exclude>
								<exclude>**/part-*</exclude>
								<exclude>**/*.keep</exclude>
								<exclude>**/target/**</exclude>
								<exclude>**/*.svg</exclude>
								<exclude>**/derby.log</exclude>
								<!-- Jupyter Notebooks -->
								<exclude>**/*.ipynb</exclude>
								<!-- Generated antlr files -->
								<exclude>src/main/java/*.tokens</exclude>
								<exclude>**/*.interp</exclude>
								<!-- Generated antlr files -->
								<exclude>src/main/java/org/apache/sysds/protobuf/*.java</exclude>
								<!-- Compiled ptx file from nvcc -->
								<exclude>src/main/cuda/kernels/SystemDS.ptx</exclude>
								<exclude>src/main/cuda/kernels/reduction.ptx</exclude>
								<!-- Test Validation files -->
								<exclude>src/test/scripts/functions/jmlc/**/*.impute</exclude>
								<exclude>src/test/scripts/functions/jmlc/**/*.map</exclude>
								<exclude>src/test/scripts/functions/jmlc/**/*.mode</exclude>
								<exclude>src/test/scripts/functions/jmlc/**/*.ndistinct</exclude>
								<exclude>src/test/scripts/functions/jmlc/**/*.node</exclude>
								<exclude>src/test/scripts/functions/jmlc/tfmtd_example/Bin/saleprice.bin</exclude>
								<exclude>src/test/scripts/functions/jmlc/tfmtd_example/Bin/sqft.bin</exclude>
								<exclude>src/test/scripts/functions/jmlc/tfmtd_example/column.names</exclude>
								<exclude>src/test/scripts/functions/jmlc/tfmtd_example/dummycoded.column.names</exclude>
								<exclude>src/test/scripts/functions/jmlc/tfmtd_example2/column.names</exclude>
								<exclude>src/test/scripts/functions/jmlc/tfmtd_frame_example/tfmtd_frame</exclude>
								<exclude>src/test/scripts/applications/entity_resolution/connected_components/expected/**</exclude>
								<!-- csv test input not captured by *.csv -->
								<exclude>src/test/scripts/functions/io/csv/in/**</exclude>
								<!-- IOGEN input examples -->
								<exclude>src/test/scripts/functions/iogen/in/**</exclude>
								<!-- Python bindings lineage test result comparison -->
								<exclude>src/main/python/tests/lt*.txt</exclude>
								<exclude>scripts/tutorials/federated/python_venv/**</exclude>
								<exclude>scripts/tutorials/federated/data/**</exclude>
								<exclude>scripts/tutorials/federated/tmp/**</exclude>
								<!-- Perftest requirement file -->
								<exclude>scripts/perftest/python/requirements.txt</exclude>
								<!-- external sources -->
								<exclude>src/main/cuda/ext/**</exclude>
								<exclude>src/main/cuda/.idea/</exclude>
							</excludes>
						</configuration>
					</plugin>
				</plugins>
			</build>
		</profile>

		<profile>
			<id>proton</id>
			<build>
				<plugins>
					<plugin>
						<!-- generate .java files from .proto -->
						<groupId>com.github.os72</groupId>
						<artifactId>protoc-jar-maven-plugin</artifactId>
						<version>3.11.4</version>
						<executions>
							<execution>
								<phase>generate-sources</phase>
								<goals>
									<goal>run</goal>
								</goals>
								<configuration>
									<!-- protoc binaries to be picked up from
									  https://repo.maven.apache.org/maven2/com/google/protobuf/protoc/ -->
									<protocVersion>${protobuf.version}</protocVersion>
									<inputDirectories>
										<include>src/main/resources/protobuf</include>
									</inputDirectories>
									<outputDirectory>src/main/java</outputDirectory>
									<outputDirectories>
										<include>src/main/java</include>
									</outputDirectories>
								</configuration>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>

		<profile>
			<id>antlr</id>
			<build>
				<plugins>
					<plugin>
						<groupId>org.antlr</groupId>
						<artifactId>antlr4-maven-plugin</artifactId>
						<version>${antlr.version}</version>
						<configuration>
							<sourceDirectory>${basedir}/src/main/java</sourceDirectory>
							<outputDirectory>${basedir}/src/main/java</outputDirectory>
						</configuration>
						<executions>
							<execution>
								<id>antlr</id>
								<goals>
									<goal>antlr4</goal>
								</goals>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>

		</profile>

		<profile>
			<!-- Profile to create binary distributions. Execute with `mvn clean package
				-P distribution` -->
			<id>distribution</id>
			<build>
				<plugins>
					<plugin>
						<artifactId>maven-assembly-plugin</artifactId>
						<version>${maven-assembly-plugin.version}</version>
						<configuration>
							<tarLongFileMode>posix</tarLongFileMode>
						</configuration>
						<executions>
							<execution>
								<id>create-source-distribution</id>
								<phase>package</phase>
								<goals>
									<goal>single</goal>
								</goals>
								<configuration>
									<descriptors>
										<descriptor>src/assembly/source.xml</descriptor>
									</descriptors>
								</configuration>
							</execution>
							<execution>
								<id>create-extra-jar</id>
								<phase>package</phase>
								<goals>
									<goal>single</goal>
								</goals>
								<configuration>
									<descriptors>
										<descriptor>src/assembly/extra.xml</descriptor>
									</descriptors>
									<archive>
										<manifestEntries>
											<Artifact-Id>${project.artifactId}-extra</Artifact-Id>
											<Version>${project.version}</Version>
										</manifestEntries>
									</archive>
								</configuration>
							</execution>
							<execution>
								<id>create-binary-distribution</id>
								<phase>package</phase>
								<goals>
									<goal>single</goal>
								</goals>
								<configuration>
									<descriptors>
										<descriptor>src/assembly/bin.xml</descriptor>
									</descriptors>
								</configuration>
							</execution>
						</executions>
					</plugin>

					<plugin>
						<artifactId>maven-gpg-plugin</artifactId>
						<version>${maven-gpg-plugin.version}</version>
						<executions>
							<execution>
								<phase>verify</phase>
								<goals>
									<goal>sign</goal>
								</goals>
								<configuration>
									<!-- This is necessary for gpg to not try to use the pinentry programs -->
									<gpgArguments>
										<arg>--pinentry-mode</arg>
										<arg>loopback</arg>
									</gpgArguments>
								</configuration>
							</execution>
						</executions>
					</plugin>

					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-remote-resources-plugin</artifactId>
						<version>${maven-remote-resources-plugin.version}</version>
						<executions>
							<execution>
								<goals>
									<goal>process</goal>
								</goals>
								<configuration>
									<resourceBundles>
										<!-- Will generate META-INF/DEPENDENCIES META-INF/LICENSE META-INF/NOTICE -->
										<resourceBundle>org.apache:apache-jar-resource-bundle:1.4</resourceBundle>
									</resourceBundles>
								</configuration>
							</execution>
						</executions>
					</plugin>

					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-javadoc-plugin</artifactId>
						<version>${maven-javadoc-plugin.version2}</version>
						<configuration>
							<excludePackageNames>*.protobuf</excludePackageNames>
							<notimestamp>true</notimestamp>
							<failOnWarnings>false</failOnWarnings>
							<quiet>true</quiet>
							<additionalJOption>--add-modules=jdk.incubator.vector</additionalJOption>
							<skip>${doc.skip}</skip>
							<show>public</show>
							<source>${java.level}</source>
						</configuration>
						<executions>
							<execution>
								<id>attach-javadocs</id>
								<goals>
									<goal>jar</goal>
								</goals>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>
	</profiles>

	<dependencies>
		<!-- Delta Lake native (Spark-free) read/write via Delta Kernel -->
		<dependency>
			<groupId>io.delta</groupId>
			<artifactId>delta-kernel-api</artifactId>
			<version>${delta-kernel.version}</version>
		</dependency>
		<dependency>
			<groupId>io.delta</groupId>
			<artifactId>delta-kernel-defaults</artifactId>
			<version>${delta-kernel.version}</version>
		</dependency>
		<!-- Delta Kernel needs parquet >= 1.13 (the version Spark 3.5.x ships);
		     declared directly via ${parquet.version} so Maven's nearest-wins
		     mediation does not downgrade it to an older transitive version. The
		     jackson trio Delta Kernel relies on is pinned globally via
		     ${jackson.version}. -->
		<dependency>
			<groupId>org.apache.parquet</groupId>
			<artifactId>parquet-hadoop</artifactId>
			<version>${parquet.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.parquet</groupId>
			<artifactId>parquet-column</artifactId>
			<version>${parquet.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.parquet</groupId>
			<artifactId>parquet-common</artifactId>
			<version>${parquet.version}</version>
		</dependency>
		<!-- Delta's Spark connector, test-only: an independent (reference) Delta engine
		     used purely to cross-check that tables our Delta Kernel writer produces are
		     readable by Spark/Delta, and that tables Spark/Delta writes (including
		     deletion vectors and multiple commits) are readable by our reader. Delta
		     3.3.x targets Spark 3.5.x, matching ${spark.version}. -->
		<dependency>
			<groupId>io.delta</groupId>
			<artifactId>delta-spark_${scala.binary.version}</artifactId>
			<version>${delta-kernel.version}</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.jcuda</groupId>
			<artifactId>jcuda</artifactId>
			<version>${jcuda.version}</version>
			<scope>${jcuda.scope}</scope>
			<exclusions>
				<exclusion>
					<!-- always exclude recursive fetching of native libraries -->
					<groupId>org.jcuda</groupId>
					<artifactId>jcuda-natives</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>org.jcuda</groupId>
			<artifactId>jcublas</artifactId>
			<version>${jcuda.version}</version>
			<scope>${jcuda.scope}</scope>
			<exclusions>
				<exclusion>
					<!-- always exclude recursive fetching of native libraries -->
					<groupId>org.jcuda</groupId>
					<artifactId>jcublas-natives</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>org.jcuda</groupId>
			<artifactId>jcusparse</artifactId>
			<version>${jcuda.version}</version>
			<scope>${jcuda.scope}</scope>
			<exclusions>
				<exclusion>
					<!-- always exclude recursive fetching of native libraries -->
					<groupId>org.jcuda</groupId>
					<artifactId>jcusparse-natives</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>org.jcuda</groupId>
			<artifactId>jcusolver</artifactId>
			<version>${jcuda.version}</version>
			<scope>${jcuda.scope}</scope>
			<exclusions>
				<exclusion>
					<!-- always exclude recursive fetching of native libraries -->
					<groupId>org.jcuda</groupId>
					<artifactId>jcusolver-natives</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>org.jcuda</groupId>
			<artifactId>jcudnn</artifactId>
			<version>${jcuda.version}</version>
			<scope>${jcuda.scope}</scope>
			<exclusions>
				<exclusion>
					<!-- always exclude recursive fetching of native libraries -->
					<groupId>org.jcuda</groupId>
					<artifactId>jcudnn-natives</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<!-- for all platforms, to be included in the extra jar -->
		<dependency>
			<groupId>org.jcuda</groupId>
			<artifactId>jcuda-natives</artifactId>
			<classifier>windows-x86_64</classifier>
			<version>${jcuda.version}</version>
			<scope>${jcuda.scope}</scope>
		</dependency>

		<dependency>
			<groupId>org.jcuda</groupId>
			<artifactId>jcublas-natives</artifactId>
			<classifier>windows-x86_64</classifier>
			<version>${jcuda.version}</version>
			<scope>${jcuda.scope}</scope>
		</dependency>

		<dependency>
			<groupId>org.jcuda</groupId>
			<artifactId>jcusparse-natives</artifactId>
			<classifier>windows-x86_64</classifier>
			<version>${jcuda.version}</version>
			<scope>${jcuda.scope}</scope>
		</dependency>

		<dependency>
			<groupId>org.jcuda</groupId>
			<artifactId>jcusolver-natives</artifactId>
			<classifier>windows-x86_64</classifier>
			<version>${jcuda.version}</version>
			<scope>${jcuda.scope}</scope>
		</dependency>

		<dependency>
			<groupId>org.jcuda</groupId>
			<artifactId>jcudnn-natives</artifactId>
			<classifier>windows-x86_64</classifier>
			<version>${jcuda.version}</version>
			<scope>${jcuda.scope}</scope>
		</dependency>

		<dependency>
			<groupId>org.jcuda</groupId>
			<artifactId>jcuda-natives</artifactId>
			<classifier>linux-x86_64</classifier>
			<version>${jcuda.version}</version>
			<scope>${jcuda.scope}</scope>
		</dependency>

		<dependency>
			<groupId>org.jcuda</groupId>
			<artifactId>jcublas-natives</artifactId>
			<classifier>linux-x86_64</classifier>
			<version>${jcuda.version}</version>
			<scope>${jcuda.scope}</scope>
		</dependency>

		<dependency>
			<groupId>org.jcuda</groupId>
			<artifactId>jcusparse-natives</artifactId>
			<classifier>linux-x86_64</classifier>
			<version>${jcuda.version}</version>
			<scope>${jcuda.scope}</scope>
		</dependency>

		<dependency>
			<groupId>org.jcuda</groupId>
			<artifactId>jcusolver-natives</artifactId>
			<classifier>linux-x86_64</classifier>
			<version>${jcuda.version}</version>
			<scope>${jcuda.scope}</scope>
		</dependency>

		<dependency>
			<groupId>org.jcuda</groupId>
			<artifactId>jcudnn-natives</artifactId>
			<classifier>linux-x86_64</classifier>
			<version>${jcuda.version}</version>
			<scope>${jcuda.scope}</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.spark</groupId>
			<artifactId>spark-core_${scala.binary.version}</artifactId>
			<version>${spark.version}</version>
			<exclusions>
				<exclusion>
					<groupId>log4j</groupId>
					<artifactId>log4j</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-log4j12</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-reload4j</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-api</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>jul-to-slf4j</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>jcl-over-slf4j</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.hadoop</groupId>
					<artifactId>hadoop-client-api</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.hadoop</groupId>
					<artifactId>hadoop-client-runtime</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.hadoop</groupId>
					<artifactId>hadoop-client-runtime</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.logging.log4j</groupId>
					<artifactId>log4j-api</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.logging.log4j</groupId>
					<artifactId>log4j-slf4j-impl</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.logging.log4j</groupId>
					<artifactId>log4j-slf4j2-impl</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.logging.log4j</groupId>
					<artifactId>log4j-core</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.logging.log4j</groupId>
					<artifactId>log4j-1.2-api</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.google.protobuf</groupId>
					<artifactId>protobuf-java</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>org.apache.spark</groupId>
			<artifactId>spark-sql_${scala.binary.version}</artifactId>
			<version>${spark.version}</version>
			<exclusions>
				<exclusion>
					<groupId>log4j</groupId>
					<artifactId>log4j</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-log4j12</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-reload4j</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.logging.log4j</groupId>
					<artifactId>log4j-slf4j-impl</artifactId>
				</exclusion>
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.logging.log4j</groupId>
					<artifactId>log4j-api</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.logging.log4j</groupId>
					<artifactId>log4j-core</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-api</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>jul-to-slf4j</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>org.apache.spark</groupId>
			<artifactId>spark-mllib_${scala.binary.version}</artifactId>
			<version>${spark.version}</version>
			<exclusions>
				<exclusion>
					<groupId>log4j</groupId>
					<artifactId>log4j</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-log4j12</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-reload4j</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.logging.log4j</groupId>
					<artifactId>log4j-slf4j-impl</artifactId>
				</exclusion>
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.logging.log4j</groupId>
					<artifactId>log4j-api</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.logging.log4j</groupId>
					<artifactId>log4j-core</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-api</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>jul-to-slf4j</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-common</artifactId>
			<version>${hadoop.version}</version>
			<exclusions>
				<exclusion>
					<groupId>javax.servlet</groupId>
					<artifactId>servlet-api</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-api</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-log4j12</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-reload4j</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.logging.log4j</groupId>
					<artifactId>log4j-slf4j-impl</artifactId>
				</exclusion>
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>jul-to-slf4j</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-hdfs</artifactId>
			<version>${hadoop.version}</version>
			<exclusions>
				<exclusion>
					<groupId>javax.servlet</groupId>
					<artifactId>servlet-api</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-log4j12</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-reload4j</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.logging.log4j</groupId>
					<artifactId>log4j-slf4j-impl</artifactId>
				</exclusion>
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-api</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>jul-to-slf4j</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-client</artifactId>
			<version>${hadoop.version}</version>
			<exclusions>
				<exclusion>
					<groupId>log4j</groupId>
					<artifactId>log4j</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-log4j12</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-reload4j</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.logging.log4j</groupId>
					<artifactId>log4j-slf4j-impl</artifactId>
				</exclusion>
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-api</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>jul-to-slf4j</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<!--dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-aws</artifactId>
			<version>${hadoop.version}</version>
		</dependency-->

		<!--dependency>
			<groupId>com.amazonaws</groupId>
			<artifactId>aws-java-sdk-bundle</artifactId>
			<version>${aws-java-sdk-bundle.version}</version>
		</dependency-->

		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.1.3</version>
			<exclusions>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-log4j12</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-reload4j</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.logging.log4j</groupId>
					<artifactId>log4j-slf4j-impl</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-api</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>jul-to-slf4j</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-math3</artifactId>
			<version>3.4.1</version>
		</dependency>

		<dependency>
			<groupId>org.apache.wink</groupId>
			<artifactId>wink-json4j</artifactId>
			<version>1.4</version>
		</dependency>

		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-core</artifactId>
			<version>${jackson.version}</version>
		</dependency>

		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>${jackson.version}</version>
		</dependency>

		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-annotations</artifactId>
			<version>${jackson.version}</version>
		</dependency>

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.13.1</version>
			<scope>provided</scope>
		</dependency>

		<dependency>
			<groupId>org.openjdk.jol</groupId>
			<artifactId>jol-core</artifactId>
			<version>0.10</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.mockito</groupId>
			<artifactId>mockito-core</artifactId>
			<version>5.1.0</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<!--Used for annotations in tests to execute tests in thread safe manner-->
			<groupId>com.github.stephenc.jcip</groupId>
			<artifactId>jcip-annotations</artifactId>
			<version>1.0-1</version>
			<scope>test</scope>
		</dependency>

		<!-- fast java compiler for codegen, consistent version w/ spark -->
		<dependency>
			<groupId>org.codehaus.janino</groupId>
			<artifactId>janino</artifactId>
			<version>3.1.9</version>
			<scope>provided</scope>
		</dependency>

		<dependency>
			<groupId>org.antlr</groupId>
			<artifactId>antlr4</artifactId>
			<version>${antlr.version}</version>
			<scope>provided</scope>
			<exclusions>
				<exclusion>
					<artifactId>antlr-runtime</artifactId>
					<groupId>org.antlr</groupId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>org.antlr</groupId>
			<artifactId>antlr4-runtime</artifactId>
			<version>${antlr.version}</version>
		</dependency>

		<dependency>
			<groupId>org.apache.derby</groupId>
			<artifactId>derby</artifactId>
			<version>10.14.2.0</version>
			<scope>provided</scope>
		</dependency>

		<dependency>
			<groupId>io.netty</groupId>
			<artifactId>netty-all</artifactId>
			<version>4.1.96.Final</version>
			<!-- <scope>provided</scope> -->
			<exclusions>
				<exclusion>
					<groupId>org.apache.logging.log4j</groupId>
					<artifactId>log4j-api</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.logging.log4j</groupId>
					<artifactId>log4j-1.2-api</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>net.sf.py4j</groupId>
			<artifactId>py4j</artifactId>
			<version>0.10.9</version>
		</dependency>

		<dependency>
			<groupId>com.google.protobuf</groupId>
			<artifactId>protobuf-java</artifactId>
			<version>${protobuf.version}</version>
		</dependency>

		<dependency>
			<groupId>com.google.protobuf</groupId>
			<artifactId>protobuf-java-util</artifactId>
			<version>${protobuf.version}</version>
		</dependency>

		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${slf4j.version}</version>
		</dependency>

		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-reload4j</artifactId>
			<version>${slf4j.version}</version>
		</dependency>

		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jul-to-slf4j</artifactId>
			<version>${slf4j.version}</version>
		</dependency>

		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>${slf4j.version}</version>
		</dependency>

		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-api</artifactId>
			<version>${log4j.version}</version>
			<exclusions>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-log4j12</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-reload4j</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-core</artifactId>
			<version>${log4j.version}</version>
		</dependency>

		<dependency>
			<groupId>ch.randelshofer</groupId>
			<artifactId>fastdoubleparser</artifactId>
			<version>0.9.0</version>
		</dependency>
	</dependencies>
</project>
