<?xml version="1.0" encoding="UTF-8"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.rocksdb</groupId>
    <artifactId>rocksdbjni</artifactId>
    <version>10.5.1</version>  <!-- The version number will be replaced by the Makefile's `rocksdbjavageneratepom` target -->

    <name>RocksDB JNI</name>
    <description>RocksDB Java API and Native Libraries</description>
    <url>https://rocksdb.org</url>
    <inceptionYear>2012</inceptionYear>

    <licenses>
        <license>
            <name>Apache License 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.html</url>
            <distribution>repo</distribution>
        </license>
        <license>
            <name>GNU General Public License, version 2</name>
            <url>http://www.gnu.org/licenses/gpl-2.0.html</url>
            <distribution>repo</distribution>
        </license>
    </licenses>

    <scm>
        <connection>scm:git:https://github.com/facebook/rocksdb.git</connection>
        <developerConnection>scm:git:https://github.com/facebook/rocksdb.git</developerConnection>
        <url>scm:git:https://github.com/facebook/rocksdb.git</url>
    </scm>

    <organization>
        <name>Facebook</name>
        <url>https://www.facebook.com</url>
    </organization>

    <developers>
        <developer>
            <name>Facebook</name>
            <email>help@facebook.com</email>
            <timezone>-8</timezone>
            <roles>
                <role>architect</role>
            </roles>
        </developer>
    </developers>

    <mailingLists>
        <mailingList>
            <name>rocksdb - Google Groups</name>
            <subscribe>rocksdb-subscribe@googlegroups.com</subscribe>
            <unsubscribe>rocksdb-unsubscribe@googlegroups.com</unsubscribe>
            <post>rocksdb@googlegroups.com</post>
            <archive>https://groups.google.com/forum/#!forum/rocksdb</archive>
        </mailingList>
    </mailingLists>

    <properties>
        <project.build.source>1.8</project.build.source>
        <project.build.target>1.8</project.build.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <!-- The folder that will hold the natively compiled libraries - these are output from the Makefile -->
        <native.library.staging.dir>${project.basedir}/target-native</native.library.staging.dir>
    </properties>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>3.8.0</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-enforcer-plugin</artifactId>
                    <version>3.6.2</version>
                </plugin>
            </plugins>
        </pluginManagement>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <executions>
                    <execution>
                        <id>enforce-maven-version</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <requireMavenVersion>
                                    <version>3.9.0</version>
                                </requireMavenVersion>
                            </rules>
                            <fail>true</fail>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>pl.project13.maven</groupId>
                <artifactId>git-commit-id-plugin</artifactId>
                <version>4.9.10</version>
                <executions>
                    <execution>
                        <id>git-properties</id>
                        <goals>
                            <goal>revision</goal>
                        </goals>
                        <phase>initialize</phase>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.4.0</version>
                <configuration>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.5.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                        </manifest>
                        <manifestEntries>
                            <Build-Tag>${git.closest.tag.name}</Build-Tag>
                            <Git-Commit>${git.commit.id}</Git-Commit>
                            <Git-Commit-Abbrev>${git.commit.id.abbrev}</Git-Commit-Abbrev>
                            <Git-Commit-Timestamp>${git.commit.time}</Git-Commit-Timestamp>
                            <Build-Version>${git.build.version}</Build-Version>
                            <Build-Timestamp>${maven.build.timestamp}</Build-Timestamp>
                            <Source-Repository>${project.scm.connection}</Source-Repository>
                            <Description>${project.description}</Description>
                            <Implementation-URL>${project.url}</Implementation-URL>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.15.0</version>
                <configuration>
                    <source>${project.build.source}</source>
                    <target>${project.build.target}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>

                    <!-- Generate JNI include files -->
                    <compilerArgs>
                        <arg>-h</arg>
                        <arg>${project.build.directory}/generated-sources/jni</arg>
                    </compilerArgs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.5.4</version>
                <configuration>
                    <argLine>${argLine} -ea -Xcheck:jni -Djava.library.path=${project.basedir}/target-native</argLine>
                    <useManifestOnlyJar>false</useManifestOnlyJar>
                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
                    <!-- forkNode implementation="org.apache.maven.plugin.surefire.extensions.SurefireForkNodeFactory"/ -->
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.14</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>report</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>com.github.spotbugs</groupId>
                <artifactId>spotbugs-maven-plugin</artifactId>
                <version>4.9.8.2</version>
                <configuration>
                    <excludeFilterFile>spotbugs-exclude.xml</excludeFilterFile>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
                <version>3.28.0</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>check</goal>
                            <goal>cpd-check</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <rulesets>
                        <ruleset>/pmd-rules.xml</ruleset>
                    </rulesets>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <!-- JUnit 5 (Jupiter) -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.11.4</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.11.4</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <version>5.11.4</version>
            <scope>test</scope>
        </dependency>

        <!-- Test utilities -->
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>3.3.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <version>3.27.7</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>4.11.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <reporting>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jxr-plugin</artifactId>
                <version>3.6.0</version>
            </plugin>
        </plugins>
    </reporting>

    <profiles>

        <profile>
            <id>source-jar</id>
            <activation>
                <property>
                    <name>release.all</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <version>3.4.0</version>
                        <executions>
                            <execution>
                                <id>attach-sources</id>
                                <goals>
                                    <goal>jar-no-fork</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <archive>
                                <manifest>
                                    <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                                    <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                </manifest>
                                <manifestEntries>
                                    <Build-Tag>${git.branch}</Build-Tag>
                                    <Git-Commit>${git.commit.id}</Git-Commit>
                                    <Git-Commit-Abbrev>${git.commit.id.abbrev}</Git-Commit-Abbrev>
                                    <Git-Commit-Timestamp>${git.commit.time}</Git-Commit-Timestamp>
                                    <Build-Version>${git.build.version}</Build-Version>
                                    <Build-Timestamp>${maven.build.timestamp}</Build-Timestamp>
                                    <Source-Repository>${project.scm.connection}</Source-Repository>
                                    <Description>${project.description}</Description>
                                    <Implementation-URL>${project.url}</Implementation-URL>
                                </manifestEntries>
                            </archive>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
        
        <profile>
            <id>javadoc-jar</id>
            <activation>
                <property>
                    <name>release.all</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <version>3.12.0</version>
                        <executions>
                            <execution>
                                <id>attach-javadocs</id>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <archive>
                                <manifest>
                                    <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                                    <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                </manifest>
                                <manifestEntries>
                                    <Build-Tag>${git.branch}</Build-Tag>
                                    <Git-Commit>${git.commit.id}</Git-Commit>
                                    <Git-Commit-Abbrev>${git.commit.id.abbrev}</Git-Commit-Abbrev>
                                    <Git-Commit-Timestamp>${git.commit.time}</Git-Commit-Timestamp>
                                    <Build-Version>${git.build.version}</Build-Version>
                                    <Build-Timestamp>${maven.build.timestamp}</Build-Timestamp>
                                    <Source-Repository>${project.scm.connection}</Source-Repository>
                                    <Description>${project.description}</Description>
                                    <Implementation-URL>${project.url}</Implementation-URL>
                                </manifestEntries>
                            </archive>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
        
        <profile>
            <id>main-jar</id>
            <activation>
                <property>
                    <name>release.all</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>create-release-jar</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>single</goal>
                                </goals>
                                <configuration>
                                    <!-- Replace the main Jar with this Jar that also includes native libraries -->
                                    <appendAssemblyId>false</appendAssemblyId>
                                    <inlineDescriptors>
                                        <inlineDescriptor>
                                            <id>main</id>
                                            <formats>
                                                <format>jar</format>
                                            </formats>
                                            <includeBaseDirectory>false</includeBaseDirectory>
                                            <fileSets>
                                                <fileSet>
                                                    <directory>${project.build.outputDirectory}</directory>
                                                    <outputDirectory>/</outputDirectory>
                                                </fileSet>
                                                <fileSet>
                                                    <directory>${native.library.staging.dir}</directory>
                                                    <outputDirectory>/</outputDirectory>
                                                    <includes>
                                                        <include>*.so</include>
                                                        <include>*.jnilib</include>
                                                        <include>*.dll</include>
                                                    </includes>
                                                </fileSet>
                                            </fileSets>
                                        </inlineDescriptor>
                                    </inlineDescriptors>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <version>3.5.5</version>
                        <executions>
                            <execution>
                                <id>main-jar-it</id>
                                <goals>
                                    <goal>integration-test</goal>
                                    <goal>verify</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>linux32-jar</id>
            <activation>
                <property>
                    <name>release.all</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>create-linux32-jar</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>single</goal>
                                </goals>
                                <configuration>
                                    <attach>true</attach>
                                    <inlineDescriptors>
                                        <inlineDescriptor>
                                            <id>linux32</id>
                                            <formats>
                                                <format>jar</format>
                                            </formats>
                                            <includeBaseDirectory>false</includeBaseDirectory>
                                            <fileSets>
                                                <fileSet>
                                                  <directory>${project.build.outputDirectory}</directory>
                                                  <outputDirectory>/</outputDirectory>
                                                </fileSet>
                                                <fileSet>
                                                  <directory>${native.library.staging.dir}</directory>
                                                  <outputDirectory>/</outputDirectory>
                                                  <includes>
                                                  <include>librocksdbjni-linux32.so</include>
                                                  </includes>
                                                </fileSet>
                                            </fileSets>
                                        </inlineDescriptor>
                                    </inlineDescriptors>
                                    <archive>
                                        <manifest>
                                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                        </manifest>
                                        <manifestEntries>
                                            <Build-Tag>${git.branch}</Build-Tag>
                                            <Git-Commit>${git.commit.id}</Git-Commit>
                                            <Git-Commit-Abbrev>${git.commit.id.abbrev}</Git-Commit-Abbrev>
                                            <Git-Commit-Timestamp>${git.commit.time}</Git-Commit-Timestamp>
                                            <Build-Version>${git.build.version}</Build-Version>
                                            <Build-Timestamp>${maven.build.timestamp}</Build-Timestamp>
                                            <Source-Repository>${project.scm.connection}</Source-Repository>
                                            <Description>${project.description} for Linux i386 glibc</Description>
                                            <Implementation-URL>${project.url}</Implementation-URL>
                                        </manifestEntries>
                                    </archive>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>linux32-musl-jar</id>
            <activation>
                <property>
                    <name>release.all</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>create-linux32-musl-jar</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>single</goal>
                                </goals>
                                <configuration>
                                    <attach>true</attach>
                                    <inlineDescriptors>
                                        <inlineDescriptor>
                                            <id>linux32-musl</id>
                                            <formats>
                                                <format>jar</format>
                                            </formats>
                                            <includeBaseDirectory>false</includeBaseDirectory>
                                            <fileSets>
                                                <fileSet>
                                                  <directory>${project.build.outputDirectory}</directory>
                                                  <outputDirectory>/</outputDirectory>
                                                </fileSet>
                                                <fileSet>
                                                  <directory>${native.library.staging.dir}</directory>
                                                  <outputDirectory>/</outputDirectory>
                                                  <includes>
                                                  <include>librocksdbjni-linux32-musl.so</include>
                                                  </includes>
                                                </fileSet>
                                            </fileSets>
                                        </inlineDescriptor>
                                    </inlineDescriptors>
                                    <archive>
                                        <manifest>
                                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                        </manifest>
                                        <manifestEntries>
                                            <Build-Tag>${git.branch}</Build-Tag>
                                            <Git-Commit>${git.commit.id}</Git-Commit>
                                            <Git-Commit-Abbrev>${git.commit.id.abbrev}</Git-Commit-Abbrev>
                                            <Git-Commit-Timestamp>${git.commit.time}</Git-Commit-Timestamp>
                                            <Build-Version>${git.build.version}</Build-Version>
                                            <Build-Timestamp>${maven.build.timestamp}</Build-Timestamp>
                                            <Source-Repository>${project.scm.connection}</Source-Repository>
                                            <Description>${project.description} for Linux i386 musl</Description>
                                            <Implementation-URL>${project.url}</Implementation-URL>
                                        </manifestEntries>
                                    </archive>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>linux64-jar</id>
            <activation>
                <property>
                    <name>release.all</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>create-linux64-jar</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>single</goal>
                                </goals>
                                <configuration>
                                    <attach>true</attach>
                                    <inlineDescriptors>
                                        <inlineDescriptor>
                                            <id>linux64</id>
                                            <formats>
                                                <format>jar</format>
                                            </formats>
                                            <includeBaseDirectory>false</includeBaseDirectory>
                                            <fileSets>
                                                <fileSet>
                                                  <directory>${project.build.outputDirectory}</directory>
                                                  <outputDirectory>/</outputDirectory>
                                                </fileSet>
                                                <fileSet>
                                                  <directory>${native.library.staging.dir}</directory>
                                                  <outputDirectory>/</outputDirectory>
                                                  <includes>
                                                  <include>librocksdbjni-linux64.so</include>
                                                  <include>librocksdbjni-linux-aarch64.so</include>
                                                  <include>librocksdbjni-linux-ppc64le.so</include>
                                                  <include>librocksdbjni-linux-s390x.so</include>
                                                  <include>librocksdbjni-linux-riscv64.so</include>
                                                  </includes>
                                                </fileSet>
                                            </fileSets>
                                        </inlineDescriptor>
                                    </inlineDescriptors>
                                    <archive>
                                        <manifest>
                                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                        </manifest>
                                        <manifestEntries>
                                            <Build-Tag>${git.branch}</Build-Tag>
                                            <Git-Commit>${git.commit.id}</Git-Commit>
                                            <Git-Commit-Abbrev>${git.commit.id.abbrev}</Git-Commit-Abbrev>
                                            <Git-Commit-Timestamp>${git.commit.time}</Git-Commit-Timestamp>
                                            <Build-Version>${git.build.version}</Build-Version>
                                            <Build-Timestamp>${maven.build.timestamp}</Build-Timestamp>
                                            <Source-Repository>${project.scm.connection}</Source-Repository>
                                            <Description>${project.description} for Linux x86_64 glibc</Description>
                                            <Implementation-URL>${project.url}</Implementation-URL>
                                        </manifestEntries>
                                    </archive>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>linux64-musl-jar</id>
            <activation>
                <property>
                    <name>release.all</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>create-linux64-musl-jar</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>single</goal>
                                </goals>
                                <configuration>
                                    <attach>true</attach>
                                    <inlineDescriptors>
                                        <inlineDescriptor>
                                            <id>linux64-musl</id>
                                            <formats>
                                                <format>jar</format>
                                            </formats>
                                            <includeBaseDirectory>false</includeBaseDirectory>
                                            <fileSets>
                                                <fileSet>
                                                  <directory>${project.build.outputDirectory}</directory>
                                                  <outputDirectory>/</outputDirectory>
                                                </fileSet>
                                                <fileSet>
                                                  <directory>${native.library.staging.dir}</directory>
                                                  <outputDirectory>/</outputDirectory>
                                                  <includes>
                                                  <include>librocksdbjni-linux64-musl.so</include>
                                                  <include>librocksdbjni-linux-aarch64-musl.so</include>
                                                  <include>librocksdbjni-linux-ppc64le-musl.so</include>
                                                  <include>librocksdbjni-linux-s390x-musl.so</include>
                                                  <include>librocksdbjni-linux-riscv64-musl.so</include>
                                                  </includes>
                                                </fileSet>
                                            </fileSets>
                                        </inlineDescriptor>
                                    </inlineDescriptors>
                                    <archive>
                                        <manifest>
                                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                        </manifest>
                                        <manifestEntries>
                                            <Build-Tag>${git.branch}</Build-Tag>
                                            <Git-Commit>${git.commit.id}</Git-Commit>
                                            <Git-Commit-Abbrev>${git.commit.id.abbrev}</Git-Commit-Abbrev>
                                            <Git-Commit-Timestamp>${git.commit.time}</Git-Commit-Timestamp>
                                            <Build-Version>${git.build.version}</Build-Version>
                                            <Build-Timestamp>${maven.build.timestamp}</Build-Timestamp>
                                            <Source-Repository>${project.scm.connection}</Source-Repository>
                                            <Description>${project.description} for Linux x86_64 musl</Description>
                                            <Implementation-URL>${project.url}</Implementation-URL>
                                        </manifestEntries>
                                    </archive>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>osx-jar</id>
            <activation>
                <property>
                    <name>release.all</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>create-osx-jar</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>single</goal>
                                </goals>
                                <configuration>
                                    <attach>true</attach>
                                    <inlineDescriptors>
                                        <inlineDescriptor>
                                            <id>osx</id>
                                            <formats>
                                                <format>jar</format>
                                            </formats>
                                            <includeBaseDirectory>false</includeBaseDirectory>
                                            <fileSets>
                                                <fileSet>
                                                  <directory>${project.build.outputDirectory}</directory>
                                                  <outputDirectory>/</outputDirectory>
                                                </fileSet>
                                                <fileSet>
                                                  <directory>${native.library.staging.dir}</directory>
                                                  <outputDirectory>/</outputDirectory>
                                                  <includes>
                                                  <include>*.jnilib</include>
                                                  </includes>
                                                </fileSet>
                                            </fileSets>
                                        </inlineDescriptor>
                                    </inlineDescriptors>
                                    <archive>
                                        <manifest>
                                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                        </manifest>
                                        <manifestEntries>
                                            <Build-Tag>${git.branch}</Build-Tag>
                                            <Git-Commit>${git.commit.id}</Git-Commit>
                                            <Git-Commit-Abbrev>${git.commit.id.abbrev}</Git-Commit-Abbrev>
                                            <Git-Commit-Timestamp>${git.commit.time}</Git-Commit-Timestamp>
                                            <Build-Version>${git.build.version}</Build-Version>
                                            <Build-Timestamp>${maven.build.timestamp}</Build-Timestamp>
                                            <Source-Repository>${project.scm.connection}</Source-Repository>
                                            <Description>${project.description} for macOS</Description>
                                            <Implementation-URL>${project.url}</Implementation-URL>
                                        </manifestEntries>
                                    </archive>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>win64-jar</id>
            <activation>
                <property>
                    <name>release.all</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>create-win64-jar</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>single</goal>
                                </goals>
                                <configuration>
                                    <attach>true</attach>
                                    <inlineDescriptors>
                                        <inlineDescriptor>
                                            <id>win64</id>
                                            <formats>
                                                <format>jar</format>
                                            </formats>
                                            <includeBaseDirectory>false</includeBaseDirectory>
                                            <fileSets>
                                                <fileSet>
                                                  <directory>${project.build.outputDirectory}</directory>
                                                  <outputDirectory>/</outputDirectory>
                                                </fileSet>
                                                <fileSet>
                                                  <directory>${native.library.staging.dir}</directory>
                                                  <outputDirectory>/</outputDirectory>
                                                  <includes>
                                                  <include>*.dll</include>
                                                  </includes>
                                                </fileSet>
                                            </fileSets>
                                        </inlineDescriptor>
                                    </inlineDescriptors>
                                    <archive>
                                        <manifest>
                                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                        </manifest>
                                        <manifestEntries>
                                            <Build-Tag>${git.branch}</Build-Tag>
                                            <Git-Commit>${git.commit.id}</Git-Commit>
                                            <Git-Commit-Abbrev>${git.commit.id.abbrev}</Git-Commit-Abbrev>
                                            <Git-Commit-Timestamp>${git.commit.time}</Git-Commit-Timestamp>
                                            <Build-Version>${git.build.version}</Build-Version>
                                            <Build-Timestamp>${maven.build.timestamp}</Build-Timestamp>
                                            <Source-Repository>${project.scm.connection}</Source-Repository>
                                            <Description>${project.description} for Windows x86_64</Description>
                                            <Implementation-URL>${project.url}</Implementation-URL>
                                        </manifestEntries>
                                    </archive>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        
        <profile>
            <id>release</id>
            <activation>
                <property>
                    <name>release.all</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-enforcer-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>enforce-java-version</id>
                                <goals>
                                    <goal>enforce</goal>
                                </goals>
                                <configuration>
                                    <rules>
                                        <requireJavaVersion>
                                            <version>${project.build.target}</version>
                                        </requireJavaVersion>
                                    </rules>
                                    <fail>true</fail>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <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>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        
        <profile>
            <id>publish</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.sonatype.central</groupId>
                        <artifactId>central-publishing-maven-plugin</artifactId>
                        <version>0.10.0</version>
                        <extensions>true</extensions>
                        <configuration>
                            <publishingServerId>central</publishingServerId>
                            <deploymentName>${project.artifactId}-${project.version}</deploymentName>
                            <failOnBuildFailure>true</failOnBuildFailure>
                            <waitUntil>validated</waitUntil>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

    </profiles>

</project>
