<!-- 
	This file is part of ToolFactory JVM driver.                                                                      
	                                                                                                            
	Hosted at: https://github.com/toolfactory/jvm-driver                                                              
	                                                                                                            
	- -                                                                                                          
	                                                                                                            
	The MIT License (MIT)                                                                                       
	                                                                                                            
	Copyright (c) 2021 Luke Hutchison, Roberto Gentili                                                                          
	                                                                                                            
	Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
	documentation files (the "Software"), to deal in the Software without restriction, including without        
	limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of   
	the Software, and to permit persons to whom the Software is furnished to do so, subject to the following    
	conditions:                                                                                                 
	                                                                                                            
	The above copyright notice and this permission notice shall be included in all copies or substantial        
	portions of the Software.                                                                                   
	                                                                                                            
	THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT       
	LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO   
	EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
	AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
	OR OTHER DEALINGS IN THE SOFTWARE.
-->
<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>

	<groupId>io.github.toolfactory</groupId>
	<artifactId>jvm-driver</artifactId>
	<version>9.10.1</version>

	<packaging>jar</packaging>

	<name>ToolFactory JVM Driver</name>
	<description>
		A driver to allow deep interaction with the JVM without any restrictions
	</description>
	<url>https://toolfactory.github.io/jvm-driver/</url>

	<licenses>
		<license>
			<name>MIT License</name>
			<url>https://github.com/toolfactory/jvm-driver/blob/master/LICENSE</url>
			<distribution>repo</distribution>
		</license>
	</licenses>

	<organization>
		<name>ToolFactory</name>
		<url>https://github.com/toolfactory</url>
	</organization>

	<developers>
		<developer>
			<name>Luke Hutchison</name>
			<id>lukehutch</id>
			<email>tool.factory.heads@gmail.com</email>
			<organization>ToolFactory</organization>
			<organizationUrl>https://github.com/toolfactory</organizationUrl>
			<roles>
				<role>Administrator</role>
				<role>Developer</role>
			</roles>
		</developer>
		<developer>
			<name>Roberto Gentili</name>
			<id>roberto.gentili</id>
			<email>tool.factory.heads@gmail.com</email>
			<organization>ToolFactory</organization>
			<organizationUrl>https://github.com/toolfactory</organizationUrl>
			<roles>
				<role>Administrator</role>
				<role>Developer</role>
			</roles>
		</developer>
	</developers>

	<properties>
		<copyright.holder>Luke Hutchison, Roberto Gentili</copyright.holder>
		<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project_jdk_version>7</project_jdk_version>
		<javadocExecutable.relativePath>bin/javadoc</javadocExecutable.relativePath>
		<skipTests>true</skipTests>
		<project.test.testSuite>AllTestsSuite</project.test.testSuite>
		<project.test.includes>**/${project.test.testSuite}.java</project.test.includes>
		<project.test.excludes>**/*Test.java</project.test.excludes>
		<repository.url>https://toolfactory@github.com/toolfactory/jvm-driver.git</repository.url>

		<coveralls-maven-plugin.version>4.3.0</coveralls-maven-plugin.version>
		<jacoco-maven-plugin.version>0.8.7</jacoco-maven-plugin.version>
		<junit-jupiter.version>5.10.0</junit-jupiter.version>
		<junit.version>1.10.0</junit.version>
		<maven-antrun-plugin.version>3.1.0</maven-antrun-plugin.version>
		<maven-bundle-plugin.version>5.1.9</maven-bundle-plugin.version>
		<maven-compiler-plugin.version>3.14.0</maven-compiler-plugin.version>
		<maven-gpg-plugin.version>3.2.8</maven-gpg-plugin.version>
		<maven-jar-plugin.version>3.4.2</maven-jar-plugin.version>
        <maven-javadoc-plugin.version>3.2.0</maven-javadoc-plugin.version>
		<maven-jxr-plugin.version>3.1.1</maven-jxr-plugin.version>
		<maven-source-plugin.version>3.3.1</maven-source-plugin.version>
		<maven-scm-provider-gitexe.version>2.1.0</maven-scm-provider-gitexe.version>
		<maven-surefire-plugin.version>3.2.1</maven-surefire-plugin.version>
		<narcissus.version>1.0.13</narcissus.version>
	</properties>

	<issueManagement>
		<system>github.com</system>
		<url>https://github.com/toolfactory/jvm-driver/issues</url>
	</issueManagement>

	<scm>
		<connection>scm:git:${repository.url}</connection>
		<developerConnection>scm:git:${repository.url}</developerConnection>
		<url>https://github.com/toolfactory/jvm-driver</url>
		<tag>jvm-driver-9.10.1</tag>
	</scm>

	<dependencies>

		<dependency>
			<groupId>io.github.toolfactory</groupId>
			<artifactId>narcissus</artifactId>
			<version>${narcissus.version}</version>
		</dependency>

		<dependency>
			<groupId>org.junit.jupiter</groupId>
			<artifactId>junit-jupiter-engine</artifactId>
			<version>${junit-jupiter.version}</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.junit.platform</groupId>
			<artifactId>junit-platform-engine</artifactId>
			<version>${junit.version}</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.junit.platform</groupId>
			<artifactId>junit-platform-commons</artifactId>
			<version>${junit.version}</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.junit.platform</groupId>
			<artifactId>junit-platform-runner</artifactId>
			<version>${junit.version}</version>
			<scope>test</scope>
		</dependency>

	</dependencies>

	<build>
		<resources>
			<resource>
				<directory>${project.basedir}/../</directory>
				<includes>
					<include>**LICENSE</include>
				</includes>
				<targetPath>META-INF</targetPath>
			</resource>
			<resource>
				<directory>${project.basedir}/src/main/resources</directory>
				<includes>
					<include>**</include>
				</includes>
			</resource>
			<resource>
				<directory>${project.basedir}/../java-hook/src/main/java</directory>
				<includes>
					<include>**</include>
				</includes>
			</resource>
		</resources>
		<testResources>
			<testResource>
				<directory>${project.basedir}/src/test/java</directory>
				<excludes>
					<exclude>**/*.java</exclude>
				</excludes>
			</testResource>
			<testResource>
				<directory>${project.basedir}/src/test/resources</directory>
			</testResource>
		</testResources>
		<plugins>
			<plugin>
				<artifactId>maven-antrun-plugin</artifactId>
				<version>${maven-antrun-plugin.version}</version>
				<executions>
					<execution>
						<goals>
							<goal>run</goal>
						</goals>
						<phase>
							compile
						</phase>
						<configuration>
							<target>
								<copy file="${project.basedir}/../java-hook/bin/java/lang/ConsulterRetrieverForJDK9.class" tofile="${project.build.directory}/classes/io/github/toolfactory/jvm/function/catalog/ConsulterRetrieverForJDK9.bwc" />
								<copy file="${project.basedir}/../java-hook/bin/java/lang/reflect/AccessibleSetterInvokerForJDK9.class" tofile="${project.build.directory}/classes/io/github/toolfactory/jvm/function/catalog/AccessibleSetterInvokerForJDK9.bwc" />
								<copy file="${project.basedir}/../java-hook/bin/jdk/internal/loader/ClassLoaderDelegateForJDK9.class" tofile="${project.build.directory}/classes/io/github/toolfactory/jvm/util/ClassLoaderDelegateForJDK9.bwc" />
								<copy file="${project.basedir}/../java-hook/bin/io/github/toolfactory/jvm/function/catalog/ThrowExceptionFunction$ForJava7.class" tofile="${project.build.directory}/classes/io/github/toolfactory/jvm/function/catalog/ThrowExceptionFunction$ForJava7.class" />
							</target>
						</configuration>
					</execution>
					<execution>
						<id>add-module-info-to-jar</id>
						<phase>package</phase>
						<goals>
							<goal>run</goal>
						</goals>
						<configuration>
							<target>
								<jar update="true" destfile="${project.build.directory}/${project.build.finalName}.jar">
									<zipfileset prefix="META-INF/versions/9" dir="${project.build.directory}/classes" includes="module-info.class" />
								</jar>
							</target>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>${maven-compiler-plugin.version}</version>
				<executions>
					<execution>
						<id>default-compile</id>
						<configuration>
							<!-- compile everything to ensure module-info contains right entries -->
							<release>9</release>
						</configuration>
					</execution>
					<execution>
						<id>default-testCompile</id>
						<configuration>
							<testExcludes>
								<testExclude>module-info.java</testExclude>
							</testExcludes>
							<release>${project_jdk_version}</release>
							<verbose>true</verbose>
						</configuration>
					</execution>
					<execution>
						<id>base-compile</id>
						<goals>
							<goal>compile</goal>
						</goals>
						<!-- recompile everything for target VM except the module-info.java -->
						<configuration>
							<excludes>
								<exclude>module-info.java</exclude>
							</excludes>
							<source>${project_jdk_version}</source>
							<target>${project_jdk_version}</target>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>${maven-surefire-plugin.version}</version>
				<configuration>
					<skipTests>${skipTests}</skipTests>
					<excludes>
						<exclude>${project.test.excludes}</exclude>
					</excludes>
					<includes>
						<include>${project.test.includes}</include>
					</includes>
					<useModulePath>false</useModulePath>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.felix</groupId>
				<artifactId>maven-bundle-plugin</artifactId>
				<version>${maven-bundle-plugin.version}</version>
				<extensions>true</extensions>
                <executions>
                    <execution>
                        <id>generate-manifest</id>
                        <phase>process-classes</phase>
                        <goals>
                            <goal>manifest</goal>
                        </goals>
                    </execution>
                </executions>
				<configuration>
					<manifestLocation>${project.build.outputDirectory}/META-INF/</manifestLocation>
					<exportScr>true</exportScr>
					<instructions>					
						<Bundle-Category>Utilities</Bundle-Category>
						<built-by>${organization.name}</built-by>
						<Bundle-License>https://github.com/toolfactory/jvm-driver/blob/master/LICENSE</Bundle-License>
						<Bundle-ManifestVersion>2</Bundle-ManifestVersion>
						<Bundle-Name>JVM Driver</Bundle-Name>
						<Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
						<Bundle-Vendor>${organization.name}</Bundle-Vendor>
						<Bundle-Description>${project.description}</Bundle-Description>
						<Bundle-Version>${project.version}</Bundle-Version>
						<Require-Capability>osgi.ee;filter:="(&amp;(osgi.ee=JavaSE)(version=1.7))"</Require-Capability>
						<Import-Package>io.github.toolfactory.narcissus;version="${narcissus.version}",com.sun.management,jdk.internal.reflect;resolution:=optional,sun.misc;resolution:=optional,sun.reflect;resolution:=optional</Import-Package>
						<Multi-Release>true</Multi-Release>
    					<_dsannotations>*</_dsannotations><!-- Enable processing of OSGI DS component annotations -->
						<_metatypeannotations>*</_metatypeannotations><!-- Enable processing of OSGI metatype annotations -->
					</instructions>
				</configuration>
		 	</plugin>
			<plugin>
				<artifactId>maven-jar-plugin</artifactId>
				<version>${maven-jar-plugin.version}</version>
				<configuration>
					<excludes>
						<exclude>module-info.class</exclude>
						<exclude>jdk/</exclude>
						<exclude>java/</exclude>
						<exclude>META-INF/maven/</exclude>
					</excludes>
					<archive>
						<addMavenDescriptor>false</addMavenDescriptor>
						<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
					</archive>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-source-plugin</artifactId>
				<version>${maven-source-plugin.version}</version>
				<configuration>
					<excludes>
						<exclude>**/*.class</exclude>
					</excludes>
				</configuration>
				<executions>
					<execution>
						<id>attach-sources</id>
						<goals>
							<goal>jar</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
			
			<plugin>
			    <groupId>org.apache.maven.plugins</groupId>
			    <artifactId>maven-javadoc-plugin</artifactId>
			    <version>${maven-javadoc-plugin.version}</version>
			    <configuration>
			        <javadocExecutable>${java.home}/${javadocExecutable.relativePath}</javadocExecutable>
			        <encoding>UTF-8</encoding>
			        <source>${project_jdk_version}</source>
			        <doclint>none</doclint>
			        <failOnError>false</failOnError>
			        <additionalOptions>
			            <additionalOption>-Xdoclint:none</additionalOption>
			        </additionalOptions>
			    </configuration>
			    <executions>
			        <execution>
			            <id>attach-javadoc</id>
			            <goals>
			                <goal>jar</goal>
			            </goals>
			        </execution>
			    </executions>
			</plugin>
			
			<plugin>
                <groupId>org.sonatype.central</groupId>
                <artifactId>central-publishing-maven-plugin</artifactId>
                <version>0.8.0</version>
                <extensions>true</extensions>
                <configuration>
                    <publishingServerId>central</publishingServerId>
                    <autoPublish>true</autoPublish>
                    <waitUntil>uploaded</waitUntil>
                </configuration>
            </plugin>
		</plugins>
	</build>

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

	<profiles>
		<!-- GPG Signature on release -->
		<profile>
			<id>release-sign-artifacts</id>
			<activation>
				<property>
					<name>performRelease</name>
					<value>true</value>
				</property>
			</activation>
			<build>
				<plugins>
					<plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                        <version>${maven-gpg-plugin.version}</version>
                        <executions>
                            <execution>
                                <phase>verify</phase>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                                <configuration>
                                    <excludes>
                                        <exclude>**/*.zip</exclude>
                                    </excludes>
                                    <gpgArguments>
                                        <arg>--pinentry-mode</arg>
                                        <arg>loopback</arg>
                                    </gpgArguments>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
				</plugins>
			</build>
		</profile>
		<profile>
			<id>run-coveralls</id>
			<activation>
				<activeByDefault>false</activeByDefault>
			</activation>
			<build>
				<plugins>
					<!-- Generate coveralls reports from CI server. -->
					<plugin>
						<groupId>org.eluder.coveralls</groupId>
						<artifactId>coveralls-maven-plugin</artifactId>
						<version>${coveralls-maven-plugin.version}</version>
						<configuration>
							<sourceDirectories>
								<sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
							</sourceDirectories>
						</configuration>
					</plugin>
					<plugin>
						<groupId>org.jacoco</groupId>
						<artifactId>jacoco-maven-plugin</artifactId>
						<version>${jacoco-maven-plugin.version}</version>
						<executions>
							<execution>
								<id>prepare-agent</id>
								<goals>
									<goal>prepare-agent</goal>
								</goals>
							</execution>
						</executions>
						<configuration>
							<excludes>
								<exclude>**/*AccessibleSetterInvokerForJDK9.*</exclude>
								<exclude>**/*ClassLoaderDelegateForJDK9.*</exclude>
								<exclude>**/*ConsulterRetrieverForJDK9.*</exclude>
							</excludes>
						</configuration>
					</plugin>
				</plugins>
			</build>
		</profile>
	</profiles>
</project>