shaft-parent
Used in:
components
- OverviewOverview
- VersionsVersions
- DependentsDependents
- DependenciesDependencies
<dependency>
<groupId>io.github.shafthq</groupId>
<artifactId>shaft-parent</artifactId>
<version>10.3.20260722</version>
</dependency><project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
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>
<groupId>io.github.shafthq</groupId>
<artifactId>shaft-parent</artifactId>
<version>10.3.20260722</version>
<packaging>pom</packaging>
<name>${project.groupId}:${project.artifactId}</name>
<description>Build parent and reactor aggregator for SHAFT modules.</description>
<url>https://shafthq.github.io/</url>
<licenses>
<license>
<name>MIT License</name>
<url>http://www.opensource.org/licenses/mit-license.php</url>
</license>
</licenses>
<developers>
<developer>
<name>Mohab Mohie</name>
<email>Mohab.MohieElDeen@outlook.com</email>
<organization>GitHub</organization>
<organizationUrl>https://github.com/ShaftHQ</organizationUrl>
</developer>
</developers>
<scm>
<connection>scm:git:https://github.com/ShaftHQ/SHAFT_ENGINE.git</connection>
<developerConnection>scm:git:ssh://github.com/ShaftHQ/SHAFT_ENGINE.git</developerConnection>
<url>https://github.com/ShaftHQ/SHAFT_ENGINE</url>
</scm>
<modules>
<module>shaft-engine</module>
<module>shaft-pilot-core</module>
<module>shaft-capture</module>
<module>shaft-capture-proxy</module>
<module>shaft-doctor</module>
<module>shaft-ai</module>
<module>shaft-heal</module>
<module>shaft-mcp</module>
<module>shaft-cli</module>
<module>shaft-browserstack</module>
<module>shaft-video</module>
<module>shaft-visual</module>
<module>shaft-sikulix</module>
<module>report-aggregate</module>
<module>shaft-bom</module>
<module>legacy-shaft-engine</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- -Xmx: macos-latest GitHub-hosted runners have only 7GB RAM (vs 16GB on windows-latest/
ubuntu-latest), so the JVM's ergonomic default heap (unset otherwise) is smaller there,
and the single reused surefire fork (reuseForks=true) that runs the whole module's tests
sequentially under the JaCoCo agent accumulates garbage until it exceeds that smaller
ceiling, crashing with OutOfMemoryError: Java heap space (#3930). 1024m gives generous,
empirically verified headroom: locally reproduced a clean heap-space OOM at -Xmx80m, and
confirmed -Xmx128m comfortably clears 300+ sequential tests in the same fork, while
leaving about 6GB of the 7GB macOS runner for the browser and OS. -->
<surefireArgLine>--enable-native-access=ALL-UNNAMED --sun-misc-unsafe-memory-access=allow -Xshare:off -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8 -Xmx1024m</surefireArgLine>
<mockito.version>5.23.0</mockito.version>
<mockitoAgentArgLine>-javaagent:"${settings.localRepository}/org/mockito/mockito-core/${mockito.version}/mockito-core-${mockito.version}.jar"</mockitoAgentArgLine>
<surefire.excludedGroups>allure3-visual-demo</surefire.excludedGroups>
<jdk.version>25</jdk.version>
<lombok.version>1.18.46</lombok.version>
<maven.min.version>3.9.0</maven.min.version>
<spring-boot.version>4.1.0</spring-boot.version>
<spring-ai.version>2.0.0</spring-ai.version>
<!-- Dependency BOM Versions -->
<junit.bom.version>6.1.2</junit.bom.version>
<allure.bom.version>2.35.3</allure.bom.version>
<cucumber.bom.version>7.34.4</cucumber.bom.version>
<jackson.version>3.2.1</jackson.version>
<jackson.legacy.version>2.22.1</jackson.legacy.version>
<jackson.annotations.version>2.22</jackson.annotations.version>
<tools.jackson.core.version>3.2.1</tools.jackson.core.version>
<selenium.version>4.46.0</selenium.version>
<playwright.version>1.61.0</playwright.version>
<slf4j.version>2.0.18</slf4j.version>
<grpc.version>1.82.2</grpc.version>
<protobuf.version>4.35.1</protobuf.version>
<google.auth.library.version>1.49.0</google.auth.library.version>
<kotlin.version>2.4.0</kotlin.version>
<netty.version>4.2.16.Final</netty.version>
<!-- Dependency Versions -->
<log4j2.version>2.26.1</log4j2.version>
<testng.version>7.12.0</testng.version>
<appium.version>10.1.1</appium.version>
<browserstack.sdk.version>1.63.0</browserstack.sdk.version>
<webdrivermanager.version>6.3.4</webdrivermanager.version>
<aspectj.version>1.9.25.1</aspectj.version>
<commons.csv.version>1.14.1</commons.csv.version>
<appium.flutterfinder.version>1.0.14</appium.flutterfinder.version>
<sikulix.version>2.0.5</sikulix.version>
<jython.slim.version>2.7.4</jython.slim.version>
<tess4j.version>5.19.0</tess4j.version>
<jnr.ffi.version>2.3.0</jnr.ffi.version>
<jna.version>5.19.1</jna.version>
<asm.version>9.10.1</asm.version>
<antlr.runtime.version>3.5.3</antlr.runtime.version>
<commons.compress.version>1.28.0</commons.compress.version>
<bouncycastle.version>1.85</bouncycastle.version>
<littleproxy.version>2.8.0</littleproxy.version>
<ant.version>1.10.17</ant.version>
<poi.version>5.5.1</poi.version>
<axe.selenium.version>4.12.0</axe.selenium.version>
<pdfbox.version>3.0.7</pdfbox.version>
<guava.version>33.6.0-jre</guava.version>
<commons.lang3.version>3.20.0</commons.lang3.version>
<commons.io.version>2.22.0</commons.io.version>
<commons.codec.version>1.22.0</commons.codec.version>
<snakeyaml.version>2.6</snakeyaml.version>
<gson.version>2.14.0</gson.version>
<httpclient.version>4.5.14</httpclient.version>
<httpclient5.version>5.6.2</httpclient5.version>
<rest.assured.version>6.0.1</rest.assured.version>
<openapi.request.validator.version>3.0.0</openapi.request.validator.version>
<json.path.version>3.0.0</json.path.version>
<javassist.version>3.32.0-GA</javassist.version>
<google.api.client.version>2.9.0</google.api.client.version>
<google.http.client.version>2.1.1</google.http.client.version>
<proto.google.common.protos.version>2.73.0</proto.google.common.protos.version>
<proto.google.cloud.kms.v1.version>2.97.0</proto.google.cloud.kms.v1.version>
<error.prone.annotations.version>2.50.0</error.prone.annotations.version>
<checker.qual.version>4.2.1</checker.qual.version>
<animal.sniffer.annotations.version>1.27</animal.sniffer.annotations.version>
<httpcore.version>4.4.16</httpcore.version>
<owner.version>1.0.12</owner.version>
<picocli.version>4.7.7</picocli.version>
<jsoup.version>1.22.2</jsoup.version>
<json.version>20260522</json.version>
<rhino.version>1.9.1</rhino.version>
<tink.version>1.23.0</tink.version>
<brotli.dec.version>0.1.2</brotli.dec.version>
<commons.logging.version>1.4.0</commons.logging.version>
<jsr305.version>3.0.2</jsr305.version>
<javax.annotation.api.version>1.3.2</javax.annotation.api.version>
<google.api.common.version>2.65.0</google.api.common.version>
<j2objc.annotations.version>3.1</j2objc.annotations.version>
<failureaccess.version>1.0.3</failureaccess.version>
<auto.value.annotations.version>1.11.1</auto.value.annotations.version>
<google.oauth.client.version>1.39.0</google.oauth.client.version>
<reactive.streams.version>1.0.4</reactive.streams.version>
<!-- Build Commands-->
<installToLocalRepository>mvn clean install "-DskipTests" "-Dgpg.skip"</installToLocalRepository>
<publishJavaDocs>mvn -pl shaft-engine resources:resources javadoc:javadoc scm-publish:publish-scm</publishJavaDocs>
<!-- Deploy Commands -->
<deployToMavenCentral>mvn clean deploy -DskipTests</deployToMavenCentral>
</properties>
<dependencyManagement>
<dependencies>
<!-- GHSA advisory (low): logback-core < 1.5.35 Object Injection via HardenedObjectInputStream.
Spring Boot 4.1.0's transitive management brings 1.5.34; pin reactor-wide until a Boot
bump ships logback 1.5.35+ (shaft-mcp additionally pins locally because its imported
Boot BOM outranks inherited management). -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.5.38</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.5.38</version>
</dependency>
<!-- JUNIT6 BOM -->
<!-- https://mvnrepository.com/artifact/org.junit/junit-bom -->
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>${junit.bom.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-bom</artifactId>
<version>${allure.bom.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-bom -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-bom</artifactId>
<version>${cucumber.bom.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>tools.jackson</groupId>
<artifactId>jackson-bom</artifactId>
<version>${jackson.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.legacy.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.annotations.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.legacy.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>${jackson.legacy.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
<version>${jackson.legacy.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>${jackson.legacy.version}</version>
</dependency>
<dependency>
<groupId>tools.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${tools.jackson.core.version}</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-bom</artifactId>
<version>${selenium.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.microsoft.playwright</groupId>
<artifactId>playwright</artifactId>
<version>${playwright.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-bom</artifactId>
<version>${slf4j.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-bom</artifactId>
<version>${grpc.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-bom</artifactId>
<version>${protobuf.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.google.auth</groupId>
<artifactId>google-auth-library-bom</artifactId>
<version>${google.auth.library.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-bom</artifactId>
<version>${kotlin.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-bom</artifactId>
<version>${netty.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Pin high-conflict transitive artifacts to deterministic versions -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons.lang3.version}</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons.io.version}</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>${commons.codec.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>${commons.compress.version}</version>
</dependency>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>${snakeyaml.version}</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>${gson.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
<version>${httpclient5.version}</version>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>${rest.assured.version}</version>
</dependency>
<dependency>
<groupId>com.github.jnr</groupId>
<artifactId>jnr-ffi</artifactId>
<version>${jnr.ffi.version}</version>
</dependency>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>${jna.version}</version>
</dependency>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna-platform</artifactId>
<version>${jna.version}</version>
</dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm-util</artifactId>
<version>${asm.version}</version>
</dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm-analysis</artifactId>
<version>${asm.version}</version>
</dependency>
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr-runtime</artifactId>
<version>${antlr.runtime.version}</version>
</dependency>
<!-- Override javassist: 3.18.1-GA has a default-tools profile with OS-based activation that
always fires on Linux and references ${java.home}/../lib/tools.jar, which does not exist
in JDK 9+, causing "1 problem was encountered while building the effective model" warning.
3.30.2-GA fixed this by switching the profile activation to <jdk>[,1.8]</jdk>. -->
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>${javassist.version}</version>
</dependency>
<!-- Convergence pins for transitive conflicts introduced by monolithic dependency loading -->
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client</artifactId>
<version>${google.api.client.version}</version>
</dependency>
<dependency>
<groupId>com.google.http-client</groupId>
<artifactId>google-http-client</artifactId>
<version>${google.http.client.version}</version>
</dependency>
<dependency>
<groupId>com.google.http-client</groupId>
<artifactId>google-http-client-gson</artifactId>
<version>${google.http.client.version}</version>
</dependency>
<dependency>
<groupId>com.google.api.grpc</groupId>
<artifactId>proto-google-common-protos</artifactId>
<version>${proto.google.common.protos.version}</version>
</dependency>
<dependency>
<groupId>com.google.api.grpc</groupId>
<artifactId>proto-google-cloud-kms-v1</artifactId>
<version>${proto.google.cloud.kms.v1.version}</version>
</dependency>
<dependency>
<groupId>com.google.errorprone</groupId>
<artifactId>error_prone_annotations</artifactId>
<version>${error.prone.annotations.version}</version>
</dependency>
<dependency>
<groupId>org.checkerframework</groupId>
<artifactId>checker-qual</artifactId>
<version>${checker.qual.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>animal-sniffer-annotations</artifactId>
<version>${animal.sniffer.annotations.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>${httpcore.version}</version>
</dependency>
<dependency>
<groupId>org.aeonbits.owner</groupId>
<artifactId>owner-java8</artifactId>
<version>${owner.version}</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>${jsoup.version}</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>${json.version}</version>
</dependency>
<dependency>
<groupId>org.mozilla</groupId>
<artifactId>rhino</artifactId>
<version>${rhino.version}</version>
</dependency>
<dependency>
<groupId>com.google.crypto.tink</groupId>
<artifactId>tink</artifactId>
<version>${tink.version}</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>${testng.version}</version>
</dependency>
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>${webdrivermanager.version}</version>
</dependency>
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>${appium.version}</version>
</dependency>
<dependency>
<groupId>org.python</groupId>
<artifactId>jython-slim</artifactId>
<version>${jython.slim.version}</version>
</dependency>
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>${tess4j.version}</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk18on</artifactId>
<version>${bouncycastle.version}</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk18on</artifactId>
<version>${bouncycastle.version}</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcutil-jdk18on</artifactId>
<version>${bouncycastle.version}</version>
</dependency>
<dependency>
<groupId>io.github.littleproxy</groupId>
<artifactId>littleproxy</artifactId>
<version>${littleproxy.version}</version>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>${ant.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.brotli</groupId>
<artifactId>dec</artifactId>
<version>${brotli.dec.version}</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>${commons.logging.version}</version>
</dependency>
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>${jsr305.version}</version>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>${javax.annotation.api.version}</version>
</dependency>
<dependency>
<groupId>com.google.api</groupId>
<artifactId>api-common</artifactId>
<version>${google.api.common.version}</version>
</dependency>
<dependency>
<groupId>com.google.j2objc</groupId>
<artifactId>j2objc-annotations</artifactId>
<version>${j2objc.annotations.version}</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>failureaccess</artifactId>
<version>${failureaccess.version}</version>
</dependency>
<dependency>
<groupId>com.google.auto.value</groupId>
<artifactId>auto-value-annotations</artifactId>
<version>${auto.value.annotations.version}</version>
</dependency>
<dependency>
<groupId>com.google.oauth-client</groupId>
<artifactId>google-oauth-client</artifactId>
<version>${google.oauth.client.version}</version>
</dependency>
<dependency>
<groupId>org.reactivestreams</groupId>
<artifactId>reactive-streams</artifactId>
<version>${reactive.streams.version}</version>
</dependency>
<dependency>
<groupId>info.picocli</groupId>
<artifactId>picocli</artifactId>
<version>${picocli.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.15.0</version>
<configuration>
<release>${jdk.version}</release>
<encoding>${project.build.sourceEncoding}</encoding>
<meminitial>4096m</meminitial>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.6.3</version>
<executions>
<execution>
<id>enforce-toolchain</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireJavaVersion>
<version>[${jdk.version},26)</version>
<message>This project requires JDK ${jdk.version}.x only. Install/use that JDK before building.</message>
</requireJavaVersion>
<requireMavenVersion>
<version>[${maven.min.version},)</version>
<message>This project requires Maven ${maven.min.version}+.</message>
</requireMavenVersion>
<requireReleaseDeps>
<message>Only stable release dependencies are allowed (no snapshots).</message>
</requireReleaseDeps>
<requirePluginVersions>
<message>All Maven plugins must declare explicit versions.</message>
</requirePluginVersions>
<banDynamicVersions>
<message>Dynamic dependency versions are not allowed.</message>
</banDynamicVersions>
<banDuplicatePomDependencyVersions>
<message>Duplicate dependency declarations are not allowed in pom.xml.</message>
</banDuplicatePomDependencyVersions>
<dependencyConvergence>
<message>Dependency convergence failed. Align conflicting transitive versions via dependencyManagement.</message>
</dependencyConvergence>
<requireUpperBoundDeps>
<message>Upper bound dependency violations detected. Keep the highest compatible stable versions.</message>
</requireUpperBoundDeps>
<bannedDependencies>
<searchTransitive>true</searchTransitive>
<message>Use SHAFT standard logging stack only (Log4j2 + SLF4J bridge).</message>
<excludes>
<exclude>log4j:log4j</exclude>
<exclude>org.slf4j:slf4j-log4j12</exclude>
<exclude>ch.qos.logback:logback-classic</exclude>
<exclude>commons-logging:commons-logging</exclude>
</excludes>
</bannedDependencies>
</rules>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.21.0</version>
<configuration>
<allowMajorUpdates>true</allowMajorUpdates>
<ruleSet>
<ignoreVersions>
<ignoreVersion>
<type>regex</type>
<version>(?i).*(alpha|beta|rc|cr|m[0-9]+|ea|preview|milestone).*</version>
</ignoreVersion>
</ignoreVersions>
</ruleSet>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.5.0</version>
<configuration>
<classesDirectory>target/classes</classesDirectory>
<includes>
<include>com/**/*</include>
<include>META-INF/**/*</include>
<include>junit-platform.properties</include>
<include>resources/**/*</include>
</includes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.12.0</version>
<configuration>
<javadocExecutable>${java.home}/bin/javadoc</javadocExecutable>
<sourcepath>
${project.basedir}/src/main/java;${project.basedir}/target/generated-sources/annotations
</sourcepath>
<doclint>all,-missing</doclint>
<docfilessubdirs>false</docfilessubdirs>
<encoding>UTF-8</encoding>
<failOnError>false</failOnError>
<show>public</show>
<nohelp>true</nohelp>
<noindex>true</noindex>
<notimestamp>true</notimestamp>
<notree>true</notree>
<nodeprecatedlist>true</nodeprecatedlist>
<use>false</use>
<header>SHAFT_Engine, ${project.version}</header>
<doctitle>SHAFT_Engine, ${project.version}</doctitle>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-scm-publish-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<checkoutDirectory>${maven.multiModuleProjectDirectory}/../SHAFT_ENGINE_apidocs</checkoutDirectory>
<tryUpdate>true</tryUpdate>
<siteOutputEncoding>UTF-8</siteOutputEncoding>
<checkinComment>Publishing javadoc for ${project.artifactId}:${project.version}</checkinComment>
<content>${project.reporting.outputDirectory}</content>
<skipDeletedFiles>true</skipDeletedFiles>
<pubScmUrl>${project.scm.connection}</pubScmUrl>
<scmBranch>gh-pages</scmBranch> <!-- branch with static site -->
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.4.0</version>
<executions>
<execution>
<id>attach-sources</id>
<!-- <phase>verify</phase>-->
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
<configuration>
<excludeResources>true</excludeResources>
<includes>
<include>com/**/*.java</include>
</includes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.5.0</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>3.5.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>3.1.4</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>3.1.4</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.22.0</version>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.15</version>
<configuration>
<sourceEncoding>UTF-8</sourceEncoding>
<outputEncoding>UTF-8</outputEncoding>
<haltOnFailure>false</haltOnFailure>
<excludes>
<exclude>**/*Aspect</exclude>
<exclude>testDataFiles/**</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>default-prepare-agent-integration</id>
<goals>
<goal>prepare-agent-integration</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<goals>
<goal>report</goal>
</goals>
<phase>test</phase>
<configuration>
<dataFile>target/jacoco.exec</dataFile>
<outputDirectory>target/jacoco</outputDirectory>
<excludes>
<exclude>testDataFiles/**</exclude>
</excludes>
</configuration>
</execution>
<execution>
<id>default-check</id>
<goals>
<goal>check</goal>
</goals>
<configuration>
<rules>
<rule>
<element>SOURCEFILE</element>
<excludes>
<exclude>*Test*</exclude>
</excludes>
<limits>
<limit>
<counter>METHOD</counter>
<value>COVEREDRATIO</value>
<minimum>80%</minimum>
</limit>
</limits>
</rule>
</rules>
</configuration>
</execution>
</executions>
</plugin>
<!-- <plugin>-->
<!-- <groupId>com.epam.healenium</groupId>-->
<!-- <artifactId>hlm-report-mvn</artifactId>-->
<!-- <version>1.1</version>-->
<!-- <executions>-->
<!-- <execution>-->
<!-- <id>hlmReport</id>-->
<!-- <phase>compile</phase>-->
<!-- <goals>-->
<!-- <goal>initReport</goal>-->
<!-- </goals>-->
<!-- </execution>-->
<!-- <execution>-->
<!-- <id>hlmReportB</id>-->
<!-- <phase>test</phase>-->
<!-- <goals>-->
<!-- <goal>buildReport</goal>-->
<!-- </goals>-->
<!-- </execution>-->
<!-- </executions>-->
<!-- </plugin>-->
<plugin>
<groupId>org.sonatype.central</groupId>
<artifactId>central-publishing-maven-plugin</artifactId>
<version>0.11.0</version>
<extensions>true</extensions>
<configuration>
<publishingServerId>central</publishingServerId>
<centralBaseUrl>https://central.sonatype.com</centralBaseUrl>
<autoPublish>true</autoPublish>
<waitUntil>published</waitUntil>
<waitMaxTime>7200</waitMaxTime> <!-- two hours -->
</configuration>
</plugin>
<plugin>
<groupId>org.cyclonedx</groupId>
<artifactId>cyclonedx-maven-plugin</artifactId>
<version>2.9.2</version>
</plugin>
<plugin>
<!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-gpg-plugin -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>3.2.8</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
<configuration>
<keyname>${gpg.keyname}</keyname>
<passphrase>${gpg.passphrase}</passphrase>
<!-- Prevent gpg from using pinentry programs -->
<gpgArguments>
<arg>--pinentry-mode</arg>
<arg>loopback</arg>
</gpgArguments>
<!-- Follow these steps: https://www.git-tower.com/blog/setting-up-gpg-windows/ -->
<!-- In case you get `gpg: skipped "xxxxxx": No secret key` error
navigate to where gpg is installed, usually here `C:\Program Files (x86)\GnuPG\bin`
then copy/paste/rename `gpg.exe` to `gpg2.exe`
run `git config {DASH_DASH}global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg2.exe"`
then try again -->
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.sonatype.central</groupId>
<artifactId>central-publishing-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.cyclonedx</groupId>
<artifactId>cyclonedx-maven-plugin</artifactId>
<inherited>false</inherited>
<executions>
<execution>
<id>aggregate-sbom</id>
<phase>verify</phase>
<goals>
<goal>makeAggregateBom</goal>
</goals>
<configuration>
<outputDirectory>${maven.multiModuleProjectDirectory}/target</outputDirectory>
<outputName>bom</outputName>
<outputFormat>json</outputFormat>
<includeBomSerialNumber>false</includeBomSerialNumber>
<skipNotDeployed>false</skipNotDeployed>
<excludeArtifactId>report-aggregate</excludeArtifactId>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>